假设我需要统计目录中以 o 结尾的每个文件(例如 ab12.14o、70010340.09o)。我需要使用哪个命令?
我试过了ls *.o | wc
,但是没有用。
答案1
您可能只需要从 glob 表达式中删除.
- 这导致它仅匹配以 结尾的文件,.o
而不是o
然而,更好的方法是使用find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
您可以添加-type f
以将其限制为普通文件(排除目录)并删除-maxdepth 1
(如果您想递归计数)。
答案2
不要使用ls
。
使用 shell 数组存储以 结尾的文件的名称o
:
files=( *o )
现在做:
echo "${#files[@]}"
获取文件数量。
@steeldriver 的观点很正确,如果你没有匹配的文件名,那么 glob 模式将被按字面意思理解。因此,即使没有匹配的文件名,你仍然会得到文件数为 1 的结果。
为了克服这个问题,请设置nullglob
或failglob
shell 选项:
shopt -s nullglob
shopt -s failglob