Okey,我的问题似乎与此有关:Trouble in script with spaces in filename但是当您不得不处理大量文件时,答案似乎并没有解决问题。让我们说,我得到了一些我想用find
删除的文件的文件名,并将它们放在一个文本文件中。然后,我想用rm
删除它们。即使我手动将名称放在引号中,rm
似乎也无法解释文件名的空格!您会提出什么建议?
这取决于您实际上如何处理文件列表(尚未显示)。假设文件中每行有一个:
:: cat list
thishasnospaces
but this does
然后,即使有空格,类似的东西也将不起作用:
:: for fspec in $(cat list) ; do echo "rm -f \"${fspec}\"" ; done
rm -rf "thishasnospaces"
rm -rf "but"
rm -rf "this"
rm -rf "does"
这是因为这会将所有空白视为相同。但是,您可以使用while
循环can进行此操作:
:: cat list | while read ; do echo "rm -f \"$REPLY\""; done
rm -f "thishasnospaces"
rm -f "but this does"
您将看到每行保留一个。只要您满意就可以删除回声。
:: cat list | while read ; do rm -f "$REPLY"; done
但是请记住,这可能是不必要的。通过使用find
选项,-delete
命令已经具有删除已找到文件的功能。如果您可以使用它,那么文件名中的空格就不会那么混乱了。