使用rmdir删除一个文件夹中的许多空文件夹

蒂蒂

我有一个文件夹,该文件夹在任何时候都应少于500k文件夹。这些文件夹是动态创建的,并且当其中的文件(图像)被某些脚本删除时,该文件夹本身也应删除。由于存在错误,没有删除空文件夹,现在我们有了数百万个空文件夹...

因此,目前我大约有500k文件夹,其中包含文件,此外还有数百万个空文件夹。

因为那里有很多目录,甚至是简单的ls | wc -l需要几个小时,因此甚至无法找到确切的数字。

我可以运行find命令:find。-maxdepth 1 -d型-空; 然后用rmdir用管道传递它;但同样,查找需要花费一定的时间(甚至使用查找要约的-delete选项)

然后我想到了使用rmdir --ignore-fail-on-non-empty / path / to / huge / folder / *; 但是我不确定它的效率。基本上,此命令仅删除我文件夹中的空目录,这意味着具有文件的目录应该是安全的,不能删除。然后,“-ignore-fail-on-non-empty”选项会忽略成千上万的警告或警告,这些警告实际上并不为空。

我很快在本地创建了约10万个空文件夹,然后“触摸”其中的一些文件,然后使用rmdir命令。创建100k空文件夹花了2分钟,而删除空文件夹花了2秒(!)。因此,我寄予厚望,但我不确定它将如何处理大约1000万个文件夹...(我想我可以使用ionice来阻止系统锁定,以防它真的需要很长时间。)

如果任何人有任何想法/建议,或者以前曾遇到过类似的事情,请您为我指出解决问题的最佳方法。甚至告诉我哪种方法更好:find或rmdir ...

编辑:我忘了提到文件夹结构。主文件夹中包含文件的文件夹,其中不再有文件夹。其他文件夹为空。因此,所有数百万个文件夹要么为空,要么其中包含文件,但没有更多文件夹。因此,基本上树结构中只有一层文件夹。

丹尼斯

在不真正知道您有多少目录的情况下,很难预测哪种方法的行为,但是我可以告诉您:

find . -maxdepth 1 -type d -empty -delete

是一个非常糟糕的主意。在删除内容时,find的速度非常慢。在我进行基准测试的时间里,-delete切换速度比最佳方法慢40到50倍。

同样地,

rmdir --ignore-fail-on-non-empty /path/to/huge/folder/*

应该是次优的。Shell会将glob扩展到所有目录条目(文件和文件夹),并且甚至在将它们传递到rmdir之前,都按字母顺序对其进行排序,这将花费时间并且完全没有必要。

组合方法应该是最好的:

find . -maxdepth 1 -type d -empty -exec rmdir {} +

请注意,末尾的加号可避免为每个目录调用rmdir相反,find会收集128 KiB中可以容纳的尽可能多的目录名称(由于命令行参数的内核限制),并一次对所有目录执行rmdir

将以上内容与ionice结合使用不会造成伤害。如果“只有”几百万个目录,我怀疑是否有必要。但是由于您不知道确切的号码,因此比后悔更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

fs.unlink()可以删除一个空文件夹或非空文件夹吗?

如何使用Java API在Google Cloud Bucket中创建一个空文件夹

rm -rf不会删除文件夹内容,而是创建另一个空文件夹

在每个子文件夹中创建一个带有特定名称的空文件的文件夹

Heroku克隆创建一个空文件夹

如何在现有存储库中添加一个空文件夹?Github

删除子文件夹中的文件并删除空文件夹

将许多(1000万)个文件放在一个文件夹中

如何使用Android SDK在AWS S3存储桶中创建一个空文件夹?

当具有文件夹名称的文件已经存在时,如何创建一个空文件夹?

删除文件夹和子文件夹中的某些文件类型和空文件夹

如何删除Android上一个文件夹中的所有文件和文件夹

Linux如何删除前缀与另一个文件夹不匹配的文件夹中的文件?

如果文件夹长度超过限制,则删除文件夹中的第一个文件

删除空文件夹(递归)

无法删除空文件夹

删除空文件夹(Python)

无法使用rmdir功能删除文件夹

Linux将文件从特定目录上移一个目录,然后删除空文件夹

为文件夹中的每个文件创建一个文件夹,但不包含文件夹本身

重命名一个文件夹的文件夹中的文件到其父文件夹?

在PHP中仅删除空文件夹和子文件夹

在Win7中删除一个文件夹,该文件夹的名称太长并且以“ ..”结尾

删除Windows批处理脚本中除一个文件夹之外的文件夹?

删除工作目录中的空文件夹

在cmd空文件夹删除中的目录替换

使用powershell将不同文件夹中的各种文件保存到一个文件夹中

使用mv将文件夹替换为另一个文件夹(不先删除目标文件夹)

无法删除空文件夹,因为它已被使用