查找命令删除文件时提示某些文件不存在

查找命令删除文件时提示某些文件不存在

我有一台连接到 Ubuntu 11.10 系统的 OSX Mountain Lion 笔记本电脑,并尝试将一个.csv文件从 OSX 计算机复制到 Ubuntu 计算机。我停止了文件传输,因为我意识到它在目标文件夹中创建了几个空文件。

我现在有几百个文件在那里,我无法使用以下方法删除:

sudo find . -name "*.csv" | xargs /bin/rm

它说文件不存在。

答案1

xargs没有就不要使用-0

(是的,还有其他安全的使用方法xargs,但如果您关心它们,请在其他地方阅读。如果您不想记住很多选项和场景,就不要使用xargs,因为通常有更好的方法。)

的问题在于xargs,它的输入必须以一种其他工具无法实现的特殊方式引用。特别是,它无法处理文件名中的空格。你没有说出错误是什么(供将来参考,复制粘贴错误消息),但很可能其中一个匹配的文件名包含空格,而 xargs 会因此而阻塞。

xargs -0处理文件名中可能存在的任何奇怪字符。传递-print0find它以使其以正确的格式打印名称:

find . -name "*.csv" -print 0 | xargs -0 rm

请注意,sudo find …仅以 root 身份运行find命令,而不是rm命令。如果您想rm以 root 身份运行,请使用

find . -name "*.csv" -print0 | sudo xargs -0 rm

在 Ubuntu(以及 OSX)下,您可以使用find的内置-delete选项来删除匹配的文件。

find . -name "*.csv" -delete

如果您知道要删除的文件是空的,最好让命令find仅查找空文件,这样您就不会意外删除其他文件。

find . -name "*.csv" -type f -empty -delete

相关内容