在 zsh 中递归计算目录中与模式匹配的文件数量

在 zsh 中递归计算目录中与模式匹配的文件数量

如何递归计算某种类型的所有文件zsh

有很多方法可以做到这一点(有用的超级用户问题,例如这个给出指点),但很少zsh有具体的方法。

接下来我之前的问题-zsh已经向我提供了几种具体的解决方案,因此我将在这里记录它们以防其他人也想这么做。

答案1

特定zsh功能是 zsh globbing;我不完全理解它,但它们有效。

  1. $ a=( **/*.(cpp|h)(.) ); print $#a

    将计算以当前目录结尾的所有文件.cpp.h从当前目录递归计算,然后将结果打印为单个数字。

  2. 这个答案,我还可以使用:

    $ ls **/*.{cpp,h} | wc -l

那么,具体zsh部分是扩展以匹配以和**/*.{cpp,h}结尾的文件。我还没有找到任何我能理解的(简单)zsh 通配符的综合内容(尽管.cpp.h这解释使用**/*.{a,b}相当好)。

答案2

要正确计算不匹配项:a=( */.(cpp|h)(.N) ); print $#a

为了避免泄漏变量:local -a a; a=( */.(cpp|h)(.N) ); print $#a

相关内容