统计目录中的特定文件数量

统计目录中的特定文件数量

假设我需要统计目录中以 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 的结果。

为了克服这个问题,请设置nullglobfailglobshell 选项:

shopt -s nullglob
shopt -s failglob

相关内容