相关疑难解决方法(0)

如何计算具有特定扩展名的文件以及它们所在的目录?

我想知道.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
Run Code Online (Sandbox Code Playgroud)

这会输出关于不明确重定向的抱怨,错过当前目录中的文件,并在特殊字符上绊倒(例如,重定向find输出在文件名中打印换行符)并写入一大堆空文件(oops)。

如何可靠地枚举我的.c文件及其包含的目录?


如果有帮助,这里有一些命令来创建一个带有错误名称和符号链接的测试结构:

mkdir -p cfiles/{1..3}/{a..b} && cd cfiles
mkdir space\ d
touch -- i.c -.c bad\ .c 'terrible
.c' not-c …
Run Code Online (Sandbox Code Playgroud)

command-line bash scripts files find

15
推荐指数
3
解决办法
7364
查看次数

标签 统计

bash ×1

command-line ×1

files ×1

find ×1

scripts ×1