我已经从这些日志文件夹内运行以下命令。 但它看起来像每个文件夹将需要无限的时间。
找 。 -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 ,文件系统必须执行以下操作:
即使你是rm目录,你也只能摆脱上面的第二步,因为你仍然需要查询目录并减less链接数量。 查询目录可以优化以获得多个inode号码,但是在任何情况下,要删除每个文件,文件系统必须检查inode的链接数量并更新inode(或将其标记为删除)。
换句话说,这个操作是O(n)上要删除的文件数量,在你的情况下这个接缝非常大。
如果你不能格式化你的分区,我想你的情况;-),只需在后台或屏幕上启动任务,并耐心等待。
另一种解决scheme是备份要保留的文件,格式化分区并恢复文件。 也许它可能会比删除所有的文件更快,但是这样会花费更多的时间(如果需要,可以在后台忘记find...rm …)。