获取目录中的所有扩展及其各自的文件数

获取目录中的所有扩展及其各自的文件数

获取目录的所有扩展名:简单。获取特定扩展名的文件计数:简单。

但是获取所有文件扩展名及其各自的文件计数对我来说很困难。

例如。

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

应该返回类似这样的内容:

.txt 2
.pdf 1
.pov 1

本次练习的目的是我想要找出在某个目录中哪种文件扩展名最流行。

提前致谢

答案1

/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

以下是解释:

find ./ -type f

仅查找文件,不查找目录

grep -E ".*\.[a-zA-Z0-9]*$"

过滤文件扩展名

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

删除路径和文件名,仅保存扩展名

sort | uniq -c | sort -n

sort、uniq 和 sort

答案2

-P由于您使用的是 Linux (gnu grep),因此现在是使用 Perl REs (PCRE)和 grep选项的好时机-o。以 @bindbn 的答案作为一个很好的候选:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n

答案3

我刚刚遇到了同样的问题并想出了这个解决方案:

find . -type f | rev | cut -d "." -f 1 | rev | sort | uniq -c | sort -n

这与这里提出的其他解决方案非常相似,但可能更容易理解/记住,而且可能速度稍快一些。它还避免了文件名包含特殊字符的常见麻烦。

rev | cut -d "." -f 1 | rev反转文件名字符串,提取(反转的)文件扩展名直到“。”分隔符,并反转扩展名子字符串,然后sort | uniq -c | sort -n 计算每个扩展名的实例并按匹配的升序打印结果。

相关内容