【发布时间】:2019-06-13 01:04:03
【问题描述】:
$ ls <path>/ | wc -l
52137
完整的目录列表有效。但试图缩短文件的数量,我得到:
$ ls <path>/*horiz | wc -l
-bash: /bin/ls: Argument list too long
0
为什么?
【问题讨论】:
$ ls <path>/ | wc -l
52137
完整的目录列表有效。但试图缩短文件的数量,我得到:
$ ls <path>/*horiz | wc -l
-bash: /bin/ls: Argument list too long
0
为什么?
【问题讨论】:
因为ls <path>/,你要求ls列出<path>的文件。但是使用ls <path>/*horiz,shell 会将星号扩展为实际的文件列表,例如
ls <path>/<prefix1>horiz <path>/<prefix2>horiz ... <path>/<prefixN>horiz
但是这个列表对于单个 shell 行来说太长了,所以它会给你错误。
【讨论】:
这有一个参数,目录名,ls 在内部循环:
ls <path>/
但是请注意,这不是一个论点:
ls <path>/*horiz
在这里,shell 本身将<path>/*horiz 扩展为所有匹配的文件,然后使用该匹配列表启动ls。
你可以试试这样的:
ls <path>/ | grep -c 'horiz$'
【讨论】: