答案1
我发现最快和最节省内存的解决方案是在包含数百万个文件的目录中使用此命令:
ls -f1 | xargs rm
解释
因为ls -f1
不会对目录内容进行排序,所以它会立即开始输出。该rm
命令只接受一个参数:来自第一个命令的实际文件名。这是从 Magento 网店的会话目录中删除 3,000,000 个文件的唯一解决方案。该服务器在只有 2GB RAM 的虚拟机上运行 - 没有其他可能删除这些文件。
答案2
通过快速浏览 GNU Coreutils 8.21 和 rsync 3.0.1 源代码并查看它们对 strace 的操作,GNU Coreutils 中的 rm 在执行相同操作时似乎比 rsync 调用 malloc() 的次数多得多。不过,我怀疑这是否完全解释了速度差异,但这很可能是部分原因。