unix - 在目录列表中递归查找文件

标签 unix grep ag

如何递归计算 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/

相关文章:

UNIX 'comm' 实用程序允许在 BSD 中不区分大小写,但在 Linux 中不允许(通过 -i 标志)。我如何在 Linux 中获取它?

hadoop - 在hadoop上使用grep map-reduce程序

python - python 中的 grep -r

linux - 如何忽略历史记录中的多个命令?

bash - 菜单不想使用功能

unix - ksh 中的变量间接

bash - 查找包含字符串 match1 但不包含 match2 的文件

command-line - Silver-searcher 是否能够从文件中获取 PATTERN?

vim - 如何在 vim + fzf 中启用 AG