rm -rf mydir
对于 reiserfs 文件系统上包含 100000 个文件(在子目录中)的目录树来说,速度非常慢。
有什么想法可以更快地删除目录树(即使冒着罕见的损坏风险)?
答案1
我能想到的唯一解决方案是将所有文件放在单独的文件系统上。文件系统可以位于磁盘分区或文件中。
您可以清除分区或删除文件,而不是删除文件。
我很理解你的感受,因为我的项目有超过 200 000 个 NTFS 文件,删除树真的很麻烦。如果可以的话,我会
- 使用另一个文件系统(就你的情况而言,reiserfs 对于存储大量文件来说相当不错,如果我没记错的话)
- 避免有太多文件(例如使用数据库)
答案2
在一个目录中存放无数个文件几乎总是一个坏主意。但我总是遇到这种情况。旧文件系统变得无法使用,因为删除文件数的复杂度为 O(n)。我认为任何当前的 Linux 文件系统都不会因此而变得糟糕。(ReiserFS 不是个好选择,但如果是,我会感到惊讶)。但即使文件系统很好,shell 工具在删除文件时也会做太多工作。它们会声明文件、明确测试权限、创建大型命令行等。
一种解决方法是执行非常低级的删除,只需调用 unlink() 系统调用即可。以下是一些快速而简单的 Python 代码,当 rm 失败时,它让我删除了一百万个文件:
files = os.listdir('.')
for f in files:
try: os.unlink(f)
except Exception, e: print e
答案3
XFS 的删除速度确实快得多。ext{2,3,4} 是最差的,我不知道 reiserfs 处于它们之间的什么位置。