如何快速删除数十万个文件?

如何快速删除数十万个文件?

可能重复:
对大型目录树执行 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 --

相关内容