如何计算具有特定扩展名的文件及其所在目录?
我想知道.c在一个复杂的大型目录结构中有多少个常规文件具有扩展名,以及这些文件分布在多少个目录中。我想要的输出就是这两个数字。 我已经看到了有关如何获取文件数量的问题,但是我也需要知道文件所在目录的数量。 我的文件名(包括目录)可能包含任何字符;它们可以以.或开头,-并带有空格或换行符。 我可能有一些名称以结尾的.c符号链接,以及指向目录的符号链接。我不希望遵循或计数符号链接,或者我至少想知道是否以及何时对其进行计数。 目录结构具有许多级别,顶层目录(工作目录)中至少包含一个.c文件。 我匆匆在(Bash)shell中编写了一些命令来自己计算,但我认为结果不准确... shopt -s dotglob shopt -s globstar mkdir out for d in **/; do find "$d" -maxdepth 1 -type f -name "*.c" >> out/$(basename "$d") done ls -1Aq out | wc -l cat out/* | wc -l 这会输出有关重定向不明确的投诉,会丢失当前目录中的文件,并使用特殊字符触发(例如,重定向的find输出会在文件名中显示换行符),并写入一大堆空文件(哎呀)。 如何可靠地枚举我的.c文件及其包含的目录? 如果有帮助,可以使用以下命令创建带有错误名称和符号链接的测试结构: mkdir -p cfiles/{1..3}/{a..b} && cd …