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


14

获取目录的所有扩展名:容易。获取特定扩展名的文件数:很容易。

但是获取所有文件扩展名和它们各自的文件数在暗示我。

例如。

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

应该返回如下内容:

.txt 2
.pdf 1
.pov 1

本练习的目的是,我想找出在某个目录中流行的文件扩展名。

提前致谢

Answers:


47
/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

排序,唯一和排序


您可以使正则表达式在扩展名中允许更多字符,并grep通过执行以下操作消除:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
已暂停,直至另行通知。

丹尼斯(Dennis),用您的sed替换grep并用sed返回以下错误:sed:-e表达式#1,字符30:在s命令的RHS上无效的引用\ 1
规范化

2

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

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.