如何快速删除包含大量子文件夹的文件夹?

Mar*_*oma 15 filesystems rm

我有一个包含 266778 个子文件夹的文件夹。我怎样才能删除它?

我试过了

cd ~/.local/share/Trash/
sudo rm -rf *
Run Code Online (Sandbox Code Playgroud)

但这需要很多时间。在 1 分 25 秒的实时时间和 0.072 秒的用户时间后,它仅删除了 2500 个文件夹。这样,删除这个文件夹需要两个多小时。

有没有更快的方法来删除这个文件夹?为什么用户时间和实时时间相差这么大?

real    1m25.474s
user    0m0.072s
sys     0m28.142s
Run Code Online (Sandbox Code Playgroud)

我使用 Linux 2.6.32(Ubuntu 10.04.4 LTS)。

koj*_*iro 21

这取决于您对fast的定义。此处已有的答案为从文件系统中实际删除目录提供了一个很好的解决方案,但是如果您真正需要的是尽快释放目录名称,则可以立即在同一文件系统上重命名:

{ mv directory directory.gone && rm -rf directory.gone; } &
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这是作弊,因为我没有加快实际删除的速度,但实际上它非常有用:我一直使用这个技巧,所以我不必等待缓慢的删除操作。


Joh*_*han 18

如果您的“查找”版本实现了 -delete 子命令,那么您可以尝试

find directory -delete
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

find ~/.local/share/Trash/ -delete
Run Code Online (Sandbox Code Playgroud)

一些命令,如 rm,在内核中执行它们的大部分工作。在文件系统例程中,准确地说。执行系统调用所花费的时间以这种方式计算,因此虽然您的“rm”命令运行了很长时间,但它在用户领域并没有做太多工作 - 系统调用执行大部分工作。

  • `find directory -delete` 真的比 `rm -rf directory` 快吗?毕竟,它们执行相同的工作,并且没有两种方法可以做到。 (4认同)
  • +1 用于解释“时间”的奇怪行为 (2认同)