使用bash删除大量名称中带有空格的文件

使用bash删除大量名称中带有空格的文件,bash,parsing,filenames,Bash,Parsing,Filenames,好的,我的问题似乎和这个有关: 但是,当你必须处理一堆这样的文件时,答案似乎并不能解决问题。 假设我得到了一些文件名,我想用find删除这些文件,并将它们放在一个文本文件中。然后我想用rm删除它们,比如说rm似乎无法解释文件名的空格,即使我手动将文件名放在引号内! 您有什么建议?这取决于您实际如何处理文件列表(尚未显示)。假设文件中每行有一个: :: cat list thishasnospaces but this does 如果它们有空间,即使是这样的东西也不会起作用: :: for fs

好的,我的问题似乎和这个有关: 但是,当你必须处理一堆这样的文件时,答案似乎并不能解决问题。 假设我得到了一些文件名,我想用
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
循环来执行此操作:

:: 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


但请记住,这些可能都是不必要的。通过使用
-delete
选项,
find
命令已经能够删除它找到的文件。如果您可以使用它,那么文件名中的空格就不会那么混乱了。

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

:: 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
循环来执行此操作:

:: 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


但请记住,这些可能都是不必要的。通过使用
-delete
选项,
find
命令已经能够删除它找到的文件。如果您可以使用它,那么文件名中的空格将大大减少混乱。

为什么需要文本文件? 尝试以下方法:

touch "a b"
touch "c d"
find . -name "* *" -exec rm "{}" \;

祝你好运

为什么需要文本文件? 尝试以下方法:

touch "a b"
touch "c d"
find . -name "* *" -exec rm "{}" \;

祝你好运

如果您可以发布哪些错误以及尝试重新创建这些错误的解决方案是有用的,或者可能只是您没有引用变量。查看您是否可以发布哪些错误以及尝试重新创建这些错误的解决方案是有用的,或者可能只是您没有引用变量。请参阅。哦,我不知道find可以删除,但这样做会很糟糕,有几个例外我不想删除,我手动选择。完美。哦,我不知道find可以删除,但这样做会很糟糕,有几个例外我不想删除,我手动选择。因为我想在删除之前检查它们。确定,然后:find-名称“**”-exec echo“{}”>>test\;因为我想在删除之前检查它们。然后确定:查找-名称“**”-exec echo“{}”>>test\;