我想查看某个目录中包含的所有文件的唯一扩展名。在 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