使用 find 命令删除一组目录,而不会遇到太长的参数列表

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 应该处理这种情况。您是否收到任何其他错误消息,表明无法删除其中一个文件?请显示您的命令的副本和结果输出。

以上是关于使用 find 命令删除一组目录,而不会遇到太长的参数列表的主要内容,如果未能解决你的问题,请参考以下文章

windows 如何删除fis3的发布路径[文件名或扩展名太长,目录层次多无法删除的问题]

Linux命令-find命令

ubuntu的终端命令提示符太长的修改方法总结

linux下如果指令太长,怎么换行输入;怎么快速删除整行命令;怎么快速移动到命令最前或者最后

find-使用find删除文件

当“参数列表太长”时如何删除所有超过 3 天的文件?