【问题标题】:linux pipe argument list too long [closed]linux管道参数列表太长[关闭]
【发布时间】:2014-09-17 02:55:48
【问题描述】:

我使用以下 bash 脚本删除早于 $days 的文件。

查找 /home/xxx/conf_* -maxdepth 0 -mindepth 0 -type d -ctime +5 -exec rm -rf {} \;

但是,如果文件超过 32000+,我会得到

/usr/bin/find:参数列表太长

如何将列表缩减到仅 20000 个?

【问题讨论】:

  • -exec \; 为每个文件运行一次命令。这就是添加-exec \+ 的原因。那不可能是问题。 (另外错误是关于find。)
  • 这是您正在运行的确切命令吗? $root 的值是多少? $root 中是否有 32000+ 条路径?
  • @Etan Reisner:请参阅更新的问题以了解确切的命令。是的,有超过 32000 个目录与模式匹配
  • 不要那样做。让 find 进行过滤。 find /home/xxx -name 'conf_*' ...。如果您的发现有它,还可以考虑使用-exec \+。对于这么多条目,我想它可能会更有效率。
  • @EtanReisner 你应该用-maxdepth 1 将其作为答案发布。

标签: linux bash find pipe


【解决方案1】:

从评论到回答:

您的问题是全局扩展,但您已经在使用可以完美处理任意数量的找到结果的工具,即find。因此,您应该完全使用 glob。相反,您应该让find 完成所有工作。

类似:

find /home/xxx -maxdepth 1 -name 'conf_*' -type d -ctime +5 -exec rm -rf {} \;

另外,如果你的 find 有 -exec \+,你可能应该改用这个:

find /home/xxx -maxdepth 1 -name 'conf_*' -type d -ctime +5 -exec rm -rf {} \+

对于如此大量的匹配目录,我想rm 的执行量显着减少可能会显着提高效率。

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 2019-06-03
    • 2017-11-30
    • 2020-05-09
    • 2014-05-21
    • 2015-04-04
    • 2021-10-26
    • 2014-04-18
    相关资源
    最近更新 更多