使用 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的发布路径[文件名或扩展名太长,目录层次多无法删除的问题]