我有一台连接到 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
处理文件名中可能存在的任何奇怪字符。传递-print0
给find
它以使其以正确的格式打印名称:
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