【问题标题】:Why does using a wildcard to halve the number of arguments fail with "Argument list too long"? [duplicate]为什么使用通配符将参数数量减半会因“参数列表太长”而失败? [复制]
【发布时间】:2019-06-13 01:04:03
【问题描述】:
$ ls  <path>/ | wc -l
52137

完整的目录列表有效。但试图缩短文件的数量,我得到:

$ ls <path>/*horiz | wc -l
-bash: /bin/ls: Argument list too long
0  

为什么?

【问题讨论】:

    标签: bash shell unix arguments


    【解决方案1】:

    因为ls &lt;path&gt;/,你要求ls列出&lt;path&gt;的文件。但是使用ls &lt;path&gt;/*horiz,shell 会将星号扩展为实际的文件列表,例如

    ls <path>/<prefix1>horiz <path>/<prefix2>horiz ... <path>/<prefixN>horiz
    

    但是这个列表对于单个 shell 行来说太长了,所以它会给你错误。

    【讨论】:

      【解决方案2】:

      这有一个参数,目录名,ls 在内部循环:

      ls <path>/
      

      但是请注意,这不是一个论点:

      ls <path>/*horiz
      

      在这里,shell 本身将&lt;path&gt;/*horiz 扩展为所有匹配的文件,然后使用该匹配列表启动ls

      你可以试试这样的:

      ls <path>/ | grep -c 'horiz$'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 2016-07-11
        • 2019-10-22
        相关资源
        最近更新 更多