有效删除数百万个文件,无需首先生成所有要删除的文件的列表

有效删除数百万个文件,无需首先生成所有要删除的文件的列表

我一直在尝试弄清楚如何从已安装的 NAS 驱动器中删除数百万个文件。我访问它的操作系统是 RHEL 7.6。

该目录正在被积极写入,每天有数万或数十万个额外文件。

当我尝试运行删除技术时,例如:

rsync -av --delete empty_dir/ millions_of_files_dir/

首先它会使用大量的 CPU/MEM,并显示“正在发送增量文件列表”消息。这种情况永远持续下去,CPU/MEM 使用率慢慢减少到最低限度。

我的理论是,发生这种情况是因为文件列表永远不会结束;有无数的文件被添加。

SO:是否有一种删除技术,在删除之前不需要完整的文件列表,但会在找到它们时“流式删除”?

答案1

使用find带有-delete选项的命令,文件将在找到时被删除,而不构建完整列表:

find . -type f -delete # deletes all files in the current dir and all subdirs

需要注意的是,大多数 Linux 文件系统在单个目录中存在如此多的文件时表现不佳。即使没有构建“完整”列表,仍然需要列出目录的内容,如果目录包含数百万个文件,这将产生可怕的性能。

相关内容