如何在 Linux 中删除超大文件夹

如何在 Linux 中删除超大文件夹

我们有一个缓存文件夹,它意外地变得太大,以至于破坏了服务器。我们的服务器上有 8 GB 的 RAM,当我运行简单的rm命令删除其中的所有文件时,会消耗所有 RAM,而且 5 小时后仍然无法删除它。

因此,我们尝试使用find,但运行 12 小时后也失败了。现在,从过去 24 小时开始,findwithperl语句一直在运行,但文件夹仍然没有被删除,实际上没有删除任何文件。

当我们ls进入父文件夹时,它会显示文件夹大小1GB,我只是想知道有多少百万个文件。

所以,我的问题是,我们有没有办法可以删除文件而不列出它们,所以它只是删除文件夹或其中的文件而不列出列表(也就是说getdir()不像系统调用那样调用)

我现在确实正在考虑格式化服务器以摆脱它。

编辑:

我已经使用find-delete-exec rm -f {}

编辑2:

基于本文我们现在正在运行 perl 命令(该命令仍然运行了大约 24 多个小时),但是在我们可见的文件夹大小方面没有任何进展。

答案1

一种选择是使用 开关-deletefind我知道您说您已经使用过find,但没有具体说明您如何使用它。通常,这将尝试枚举每个文件,但我相信使用以下命令它应该会在找到它们时删除它们:

find . -type f -print -delete-print(如果您不想要输出,当然可以将其删除cd到您的文件夹或输入正确的文件夹名称)

至少值得一试。

编辑-这是来自@的另一个问题的建议unix

mkdir empty_dir
rsync -a --delete empty_dir/    yourdirectory/

答案2

尝试了各种建议后,对我有用的建议是备份我需要的文件,格式化挂载并恢复它们。当然,这取决于您要备份的文件有多大。但是,我们只能假设您正在备份文件系统 - 在这种情况下,您只需格式化和恢复即可。

相关内容