Linux无法删除文件

时间:2014-01-18 10:31:10

标签: linux bash grep find

我在找到文件时删除文件时遇到问题。 任务:必须找到带空格的文件并将其删除

我的尝试:)

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

请帮助解决此问题。

感谢。

3 个答案:

答案 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 {} \;