删除bash文件中很多带有空格的文件

问题描述 投票:0回答:2

Okey,我的问题似乎与此有关:Trouble in script with spaces in filename但是当您不得不处理大量文件时,答案似乎并没有解决问题。让我们说,我得到了一些我想用find删除的文件的文件名,并将它们放在一个文本文件中。然后,我想用rm删除它们。即使我手动将名称放在引号中,rm似乎也无法解释文件名的空格!您会提出什么建议?

bash parsing filenames
2个回答
1
投票

这取决于您实际上如何处理文件列表(尚未显示)。假设文件中每行有一个:

:: 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命令已经具有删除已找到文件的功能。如果您可以使用它,那么文件名中的空格就不会那么混乱了。


0
投票
为什么需要文本文件?尝试类似的东西:
© www.soinside.com 2019 - 2024. All rights reserved.