【问题标题】:Delete set of directories using find command without running into argument list too long使用 find 命令删除一组目录,而不会遇到太长的参数列表
【发布时间】:2018-09-23 07:37:27
【问题描述】:

我的 /tmp 目录中至少有 25,000 - 50,000 个目录。我正在尝试使用以下命令删除该目录中超过 2 天的目录。

find /path/to/tmp/* -type d -ctime +2 -delete

但是我一直遇到参数列表太长的错误。如何具体限制要删除的目录数量?我也尝试使用 maxdepth 1 选项,但这似乎不起作用。

【问题讨论】:

    标签: linux shell unix find


    【解决方案1】:

    * glob 使 shell 扩展所有目录名称并将它们传递给 find。摆脱它,让find 完成工作,而不是外壳。

    find /path/to/tmp/ -mindepth 1 -type d -ctime +2 -delete
    

    -mindepth 1 确保 find 将只处理子目录,而不是 /path/to/tmp 本身。

    如果这些目录不为空,您需要将-delete 切换为rm -r

    find /path/to/tmp/ -mindepth 1 -type d -ctime +2 -exec rm -r {} +
    

    【讨论】:

    • 我试过这个命令,它抱怨目录不为空。我认为 -delete 涵盖了这一点。我错过了什么吗?
    • @JohnKugelman :仅出于完整性考虑 - 您的解决方案并不完全相同。在原始脚本中,目录/path/to/tmp/.x 不会被删除,而在您的情况下它将被删除。也许这对 OP 来说没有问题,但我们不能确定。
    • @chrisrhyno2003 : rm -r 应该处理这种情况。您是否收到任何其他错误消息,表明无法删除其中一个文件?请显示您的命令的副本和结果输出。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2018-07-24
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多