无法在linux中一次删除大量的文件

我已经从这些日志文件夹内运行以下命令。 但它看起来像每个文件夹将需要无限的时间。

找 。 -type f -exec rm -v {} \;

rwxrwxr-x 2 root root 77881344 Mar 16 03:06 logs.123 drwxrwxr-x 2 root root 105709568 Nov 14 20:09 logs_15Nov2011 drwxrwxr-x 2 root root 6852608 Aug 1 2011 logs2 drwxrwxr-x 2 root root 286191616 Nov 2 08:40 logs_2Nov drwxrwxr-x 2 root root 25206784 Nov 10 04:04 logs_del drwxrwxr-x 4 root root 2686976 Oct 6 01:56 logs_delete drwxrwxr-x 2 root root 4096 May 11 2011 logsMay112011 drwxrwxr-x 2 root root 69087232 Aug 29 2011 logs_old drwxrwxr-x 7 root root 382480384 May 9 2011 logs.old905 drwxrwxr-x 2 root root 4096 May 11 2011 logsTR1218 

任何build议比这更好,更快地删除所有这些日志?

GNU查找具有-delete选项,始终是安全的:

 find . -type -f -delete 

正如其他地方所评论的,你也可以使用xargs,但是要非常小心地使用它。

 find . -type f -print0 | xargs -0 rm -vf 

所有其他的答案都假定你想保留这些目录,但是从原来的信息来看你并不清楚, 此外,即使你想保持这个结构,你仍然需要删除和重新创build目录,因为目录文件已经变得非常大 – 当你清空它们时它们不会缩小,而且它们的大小会大大减慢操作在他们的未来。

所以你有没有考虑过

 rm -rf log* 

如果在rm删除目录失败时可以pipe理很多错误,则可以从另一端处理这个问题

 for dir in $(find . -type d) do rm $dir/* done 

尝试

 find . -type f | xargs rm -vf 

除了重新格式化分区,我没有看到任何更快的方式来删除所有的文件。

问题是这些目录中有大量的文件(你提供的ls -l输出的大小是巨大的!)。 对于每个rm ,文件系统必须执行以下操作:

  1. 查询inode号码的目录,
  2. 更新目录以从中删除文件,
  3. 减lessinode的链接数量(如果你想了解更多关于链接数量的信息,请参阅硬链接 )
  4. 如果链接计数为零,请从磁盘中删除数据。

即使你是rm目录,你也只能摆脱上面的第二步,因为你仍然需要查询目录并减less链接数量。 查询目录可以优化以获得多个inode号码,但是在任何情况下,要删除每个文件,文件系统必须检查inode的链接数量并更新inode(或将其标记为删除)。

换句话说,这个操作是O(n)上要删除的文件数量,在你的情况下这个接缝非常大。

如果你不能格式化你的分区,我想你的情况;-),只需在后台或屏幕上启动任务,并耐心等待。

另一种解决scheme是备份要保留的文件,格式化分区并恢复文件。 也许它可能会比删除所有的文件更快,但是这样会花费更多的时间(如果需要,可以在后台忘记find...rm …)。