Linux 计算给定目录中的文件数(具有任意文件名)

Linux 计算给定目录中的文件数(具有任意文件名),linux,shell,Linux,Shell,我试图计算给定目录中与特定名称模式匹配的文件数。虽然这听起来很简单,但问题比我想象的要复杂得多,因为文件名可能包含空格和其他讨厌的字符 因此,从一个初始的find-name“${filePattern}”|wc-l开始,我现在已经得到了这个表达式: find . -maxdepth 1 -regextype posix-egrep -regex "${filePattern}" -print0 | wc -l --files0-from=- maxdepth选项仅限于当前目

我试图计算给定目录中与特定名称模式匹配的文件数。虽然这听起来很简单,但问题比我想象的要复杂得多,因为文件名可能包含空格和其他讨厌的字符

因此,从一个初始的
find-name“${filePattern}”|wc-l
开始,我现在已经得到了这个表达式:

find . -maxdepth 1 -regextype posix-egrep -regex "${filePattern}" -print0 | wc -l --files0-from=-
maxdepth
选项仅限于当前目录。find和wc的选项中的
-print0
-files0分别发出和接受以空字节结尾的文件名。这应该考虑到文件名中可能包含的特殊字符

但是:
--files0from=
选项将字符串解释为文件名,
wc
因此计算这些文件中包含的行数。但我只需要文件本身的数量(即,
find
发出的以空字节结尾的字符串的数量)。对于这个
wc
需要一个
-l0
(或者可能是
-w0
)选项,而它似乎没有。你知道我怎么计算那些名字/字符串的数量吗


而且-是的:我意识到filePattern的语法在这两个变体中必须是不同的。前者使用shell语法,而后者需要“real”regex语法。但这没关系,实际上是我想要的:它允许我一次搜索多个文件模式。问题实际上只是计算以空字节结尾的字符串。

您可以使用
tr
删除所有非NUL字符,然后计算剩余的字符数

find . -maxdepth 1 -regextype posix-egrep -regex "${filePattern}" -print0 | tr -cd '\0' | wc -c
如果处理的文件数量从小到中,另一种解决方案是将匹配项存储在数组中并检查数组大小。(正如您在问题中提到的,这将使用glob语法而不是regex。)


杰出的使用
..的解决方案tr-cd'\0'| wc-c
工作起来很有魅力!谢谢
files=(*foo* *bar*)
echo "${#files[@]}"