我必须从一个文件夹中删除200 000个文件(全部),我不想删除文件夹本身。
使用rm,我得到一个“参数列表太长”的错误。 我试图用xargs做一些事情,但我不是一个壳牌人,所以它不起作用:
find -name * | xargs rm -f
$ find /path/to/folder -type f -delete
你做的一切都是正确的。 这是'*' ,给你一个问题(shell将其扩展到文件列表而不是find
)。 正确的语法可以是:
cd <your_directory>; find . -type f | xargs rm -f find <your_directory> -type f | xargs rm -f
(后者效率稍差,因为它会传递更长的名字给xargs
,但是你几乎不会注意到:-))
或者,你可以像这样逃避你的'*' (但是在这种情况下,它也会尝试删除“。”和“..”;这不是一个大问题 – 你只会得到一些警告:-)):
find . -name '*' | xargs rm -f find . -name "*" | xargs rm -f find . -name \* | xargs rm -f
如果你的文件名包含空格,那么使用这个:
find . -type f -print0 | xargs -0 rm -f
以下命令将从当前目录中删除所有文件:
find . -type f -exec rm {} \;
你可以试试
find /path/to/folder -type f -print0 | xargs -0 rm -f
要么
find /path/to/folder -type f -exec rm -f "{}" +
荣誉量子答案,这里有一些补充。
如果你想删除具有特定名称模式的文件,你可以这样写。 还添加了-print,以便您可以在文件被删除时看到发生了什么。
sudo find /home/mydirectory -name "*.jpg" -type f -print -delete
这例如删除mydirectory中的所有jpeg。