如何递归计算 Linux 目录列表中的文件数量?
示例:
/dog/
/a.txt
/b.txt
/c.ipynb
/cat/
/d.txt
/e.pdf
/f.png
/g.txt
/owl/
/h.txt
我想要以下输出:
5 .txt
1 .pynb
1 .pdf
1 .png
我尝试了以下方法,但没有成功。
find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
最佳答案
这个find + gawk
可能适合你:
find . -type f -print0 |
awk -v RS='\0' -F/ '{sub(/^.*\./, ".", $NF); ++freq[$NF]} END {for (i in freq) print freq[i], i}'
在 find
中使用 -print0
来处理带有空格和其他特殊全局字符的文件是安全的。同样,我们在 awk
中使用 -v RS='\0'
来确保 NUL
字节是记录分隔符。
关于unix - 在目录列表中递归查找文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65380939/