【问题标题】:Deleting large no of folders in one go一次性删除大量文件夹
【发布时间】:2016-12-26 12:21:53
【问题描述】:

我有一个 1M 文件夹/目录的列表,我需要在我的系统上删除它。最好的方法是什么?

我正在寻找可能不会花费大量时间的最佳解决方案,因为我有一些进程将等待其完成。

PS:如果需要,我可以将所有文件夹名称放在一个文件中,或者如果我们不能一次性完成,我可以批量执行。

【问题讨论】:

标签: linux bash centos delete-file rm


【解决方案1】:

使用xargs 工具。它将从文件中读取所有文件夹名称并调用命令 - 在本例中为 rmdir

xargs rmdir < list_of_folders

如果您确定可以删除非空文件夹,请使用 rm -r 而不是 rmdir

我认为这大约是您能获得的最快速度。 rmdir 将尽可能快地运行(简单的操作系统调用),使用 xargs 可确保您不会创建 1M 的单独进程。

您可以利用您的列表中没有“嵌套”目录。 这样,如果您有三个文件夹 a/ a/b/a/c/,并且 b/c/a/ 中的唯一条目,那么您可以省略 a/b/a/c/ 并调用rm -r a/。 但不值得通过ls 进行检查,因为ls 也会花费您可能无法节省的时间。

【讨论】:

    【解决方案2】:

    rm 命令完全有能力处理这个问题。只需给它您需要删除的文件夹列表(shell expansions 可以为您节省一些时间),不要忘记-r 开关。

    使用一些常见扩展的示例:

    rm -r folder_a src/dir_* app_{logs,src,bin}
    

    【讨论】:

    • 他说他有一百万个目录的列表。由于程序参数的长度有限 (xargs --show-limits &lt; /dev/null),单个 rm 调用将失败(在 bash 中尝试 /bin/echo {01..10000000} &gt; /dev/null)。 xargs 将处理此问题并尽可能少地运行 rms,但尽可能多地运行。
    • 哎呀,我把 1M 目录误认为 1K 目录... innit 不完全一样
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2014-04-01
    • 2013-02-17
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多