如何删除许多(200 000)文件?


17

我必须从文件夹中删除20万个文件(全部),并且我不想删除文件夹本身。

使用rm时,出现“参数列表过长”错误。我尝试使用xargs进行操作,但是我不是Shell Guy,所以它不起作用:

find -name * | xargs rm -f

5
为什么不删除文件夹并在删除后重新创建它?
garconcn 2011年

Answers:


35
$ find /path/to/folder -type f -delete

15
值得一提的是,GNU find(大多数Linux发行版使用的)可以使用删除自己的文件-delete。这样也可以避免包含引号或换行符的文件出现问题(尽管您可以使用GNU find -print0和GNU xarg的-0选项来解决此问题)。
DerfK 2011年

3
@DerfK,好评论!此外,大量的脂肪酶往往与游戏xargs同时find具有-exec command {} +语法。
poige 2011年

5

您做对了所有事情。正是'*'给您带来了问题(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

1
如果文件名包含空格,则此方法不起作用。
2011年

@lain:是的,我只是在编辑我的答案以包括空格的技巧:-)
dtoubelis 2011年


2

你可以试试

find /path/to/folder -type f -print0  | xargs -0 rm -f

要么

find /path/to/folder -type f -exec rm -f "{}" +

1

量子答案的荣誉,这里有一些补充。

如果您想删除具有特定名称模式的文件,可以这样编写。还添加了-print,因此您可以查看正在删除文件时发生的情况。

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

例如,这会删除mydirectory中的所有jpeg。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.