列出目录中包含的文件的所有唯一扩展名

列出目录中包含的文件的所有唯一扩展名

我想查看某个目录中包含的所有文件的唯一扩展名。在 bash 中执行此操作的命令是什么?

可以使用find . -type f获取当前目录中的所有文件,然后删除扩展名,并将其传送到uniq。删除扩展名的最简单方法是什么?

答案1

尝试这个:

find . -type f | sed -rn 's|.*/[^/]+\.([^/.]+)$|\1|p' | sort -u

它不输出任何内容:

  • 没有扩展名的文件
  • 名称以点结尾的文件
  • 隐藏文件

将其通过管道传输到 也可能很有用sort | uniq -c

答案2

删除扩展名的一个快速且容易记住的方法是假设所有文件名都具有“name.ext”格式,然后使用:

 ls -1 | cut -d"." -f2- | sort | uniq -c

这将计算出有多少个独特的扩展,例如:

   1 sh  
   3 txt  
   4 txt.Z  
  17 dat  
  72 dat.gz  

答案3

find . -type f | sed -E 's/.+[\./]([^/\.]+)/\1/' | sort -u

适用于 OS X,但不包括没有扩展名的文件。我的下载文件夹:

DS_Store
dmg
exe
localized
msi
nib
plist
pmproj
rar
tgz
txt
webloc
zip

您可能需要sed -r吗?


小问题:没有扩展名的文件会打印其名称。隐藏文件(例如.DS_Store)会打印其名称而不带前导.

答案4

瞧,这就是我喜欢 awk 的原因:

find . -type f | awk -F "." '{ print $(NF) }' | sort -u

相关内容