【问题标题】:Argument list too long error for Find commandFind 命令的参数列表太长错误
【发布时间】:2019-04-02 14:36:16
【问题描述】:

我想从子目录中找到带有发布时间的文件名, 下面的代码工作正常,但突然间我得到了 Argument list too long 错误。

find /bishare/IRP_PROJECT/SXM_SFTP/*/INBOUND/* -name "*.xml" -type f -print0 | xargs -0 stat -c "%y  %n"   >> /appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/File_Posted_$CURRENT_DATE.txt

【问题讨论】:

  • 你能用find-exec代替xargs吗,例如find … -exec stat -c "%y %n" {} \; >> …?
  • 仍然出现同样的错误。
  • 什么是错误,findxargs 或外壳?
  • 可以提供类似find /bishare/IRP_PROJECT/SXM_SFTP/ -path '*/INBOUND/*.xml' … 的帮助吗?
  • 当然不是我的第一个建议,因为它不使用xargs?

标签: shell unix


【解决方案1】:

如果扩展通配符产生的字符多于ARG_MAX 的字符数,则会发生错误。

尝试将其拆分,以便没有通配符。

find /bishare/IRP_PROJECT/SXM_SFTP/ -type -d -name INBOUND -execdir \
    find . -name "*.xml" -type f -print0 \; |
xargs -0 stat -c "%y  %n"  >> /appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/File_Posted_$CURRENT_DATE.txt

【讨论】:

  • 我试过拆分代码,得到下面的错误,参数 -type 应该只包含一个字母 stat: cannot stat ';': No such file or directory
  • 抱歉,\; 放错了位置 - 现已修复。 -type 错误听起来像是你抄错了。
【解决方案2】:
find /bishare/IRP_PROJECT/SXM_SFTP/ -path '*/INBOUND/*.xml' -exec stat -c "%y %n" {} \; >>/appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/File_Posted_$CURRENT_DATE.txt

【讨论】:

  • 这使用了 GNU find 功能 — -path 选项(这不是问题,只要您知道这是您正在做的事情并且不希望代码在平台上工作没有 GNU find)。它应该使用+ 代替\; 以达到xargs 创建适当长的命令行而不会过长的效果。使用\; 意味着stat 在每个匹配文件中执行一次;使用+ 意味着stat 的执行频率要低得多。
  • 如果这对你有用,很好;但这比从您的问题中的信息中推断出来的要具体一些。将来您可能希望确保在问题中描述预期的格式和数据量。
猜你喜欢
  • 2012-07-02
  • 2015-04-27
  • 2018-07-24
  • 1970-01-01
  • 2019-11-15
  • 2014-12-03
  • 1970-01-01
  • 2018-09-23
  • 2015-06-25
相关资源
最近更新 更多