当报告“参数列表太长”时,如何从目录中删除所有文件

当报告“参数列表太长”时,如何从目录中删除所有文件

我有一个目录,里面有几十万个文件。

我想删除所有文件,但 rm * -f 报告:“参数列表太长”

清除该目录的最佳方法是什么?

答案1

如果您无法删除该目录,您可以随时使用 find。

find . -maxdepth 1 -type f -exec rm -f {} \;

这将删除当前目录中的所有文件,并且仅删除当前目录(而不是子目录)。

答案2

查找 . -maxdepth 1 -type f -exec rm -f {} \;

它只是花费太长时间(每个文件执行一次 rm )。

这个效率更高:

查找 . -maxdepth 1 -type f -print0 | xargs -r0 rm -f

因为它尽可能多地将文件名作为 rm 的参数,然后使用下一批文件名运行 rm......可能 rm 只被调用 2 或 3 次。

答案3

这两种方法都可以解决这个问题。下面对每种技术在这里

find . -name WHATEVER -exec rm -rf {} \;

或者

ls WHATEVER | xargs rm -rf

问题源于 bash 使用目录中的每个项目扩展“*”。这两种解决方案都是依次处理每个文件。

答案4

所有这些 find 调用都非常好,但是当我匆忙时,我很少记得确切需要的命名法:相反,我使用 ls。正如有人提到的,ls . 可以工作,但我更喜欢 ls -1,如下所示:

ls -1 | xargs -n 100 rm -rf

使用 -n xxx 数字是相当安全的,因为超过最大值要么会被自动更正(如果超过 size-max;参见 -s ),要么如果超出应用程序的 args-max,它通常会相当明显。

值得注意的是,当您只想删除大目录中的文件子集,而又不想因为某种原因使用 find 时,grep 可以方便地插入到此链的中间。

该答案假设您正在使用 Gnu 核心实用程序来执行 ls、xargs 等。

相关内容