可能重复:
对大型目录树执行 rm -rf 需要几个小时
我在计算集群 (Scientific Linux) 上运行模拟程序,该程序生成数十万个原子坐标文件。但我在删除这些文件时遇到了问题,因为 rm -rf 永远无法完成,而且
find . -name * | xargs r
有没有办法直接取消此目录与目录树的链接?该存储单元由数百人使用,因此重新格式化不是一种选择。
谢谢
答案1
方法 1 假设这些文件是需要创建的,那么使用后只需删除即可。
如果可能的话,把所有这些文件并且只有那些文件,在独立的分区或磁盘中创建。当需要删除它们时,卸载分区并格式化它。EXT4(不是 EXT2)格式只需几秒钟。
确保您没有在同一位置保存信息/报告/等。
您可以直接或使用-o 绑定选项。
方法 2
稍微突破一下思维定式,不要使用单独的文件,而是将所有数据放入数据库表中。然后在使用后删除整个表。
答案2
我通常使用类似如下的方法:
find ./directoryname -type f -name '*file-pattern*' -exec rm {} +
也可以将-delete
标志用于find
命令。
find ./directoryname -type f -name '*file-pattern*' -delete
这些文件的生成是否存在问题/错误?应用程序层面有什么可以提供帮助的吗?
答案3
/lost+found
如果您不介意无法取回可用空间,并且所有文件都会在下次重新出现fsck
,那么只需取消链接目录就完全可以。
删除文件并不是最耗时的部分,而是所有在后台整理的文件系统维护代码才是最耗时的,处理数百万个小文件需要花费很长时间。如果它们处于扁平、宽的文件结构中,而不是深而薄的文件结构中(即,许多文件位于几个目录中,而不是许多文件位于许多嵌套目录中),则需要更长的时间。正如您所注意到的,在某些情况下,执行此操作可能比简单地重新创建文件系统花费的时间更长。
如果这是我的问题,我会创建一个自定义分区来保存这些文件,此外,我可能会使用tmpfs
,它是更好地为存储临时文件而设计的,并且可以减少文件系统重新创建的时间。
答案4
我猜你遇到了一个奇怪的文件类型,阻止了 rm 完成。尝试以下方法
find . -type d -o -type f -print0 | xargs -0 rm -rf --