我在找到文件时删除文件时遇到问题。 任务:必须找到带空格的文件并将其删除
我的尝试:)
rm $(find -L /root | grep -i ' ')
但我有错误:
rm: cannot remove `/root/test': No such file or directory
rm: cannot remove `2.txt': No such file or directory
rm: cannot remove `/root/test': No such file or directory
rm: cannot remove `3.txt': No such file or directory
rm: cannot remove `/root/test': No such file or directory
rm: cannot remove `1.txt': No such file or directory
请帮助解决此问题。
感谢。
答案 0 :(得分:3)
我猜你正在寻找带空格或引号的文件。试试这个:
find /test/path -print0 | xargs -0 rm
这样做是将文件名以NULL
字节分隔给stdout,xargs
将作为分隔符。这允许输出中的空格,引号和其他这样的乐趣。
现在,如果要删除目录,rm
将不起作用。因此,您可能需要在上面添加-type f
。
请注意,gnu find
本身有一个-delete
运算符,它会为您删除文件,但您想知道原因。因此,较短的路线将是:
find /test/path -delete
如果你不添加-type f
,这也将处理目录。它还将首先处理删除最深层的事情(想想为什么需要这样做)。
答案 1 :(得分:1)
为什么不这样:
find /root -type f -name '* *' -exec rm -f {} ';'
答案 2 :(得分:1)
您可以为find命令指定-exec参数,以便将生成的文件作为参数运行命令。在您的情况下,以下命令将执行您想要的操作。
-type f
将仅打印文件。如果您只想要目录,请使用-type d
。如果你不使用这些,那么它将打印文件和目录。
由于这是一个删除操作,首先运行该命令,看看它是否正在打印你想要的文件。
find /root -type f -name '* *'
然后如果一切正常,请运行此命令删除它们。
find /root -type f -name '* *' -exec rm {} \;