在Linux机器上,我希望遍历一个文件夹层次结构,并获得其中所有不同文件扩展名的列表。

从外壳中实现这一点的最佳方法是什么?


当前回答

因为已经有了另一个使用Perl的解决方案:

如果你安装了Python,你还可以这样做(从shell):

python -c "import os;e=set();[[e.add(os.path.splitext(f)[-1]) for f in fn]for _,_,fn in os.walk('/home')];print '\n'.join(e)"

其他回答

Powershell:

dir -recurse | select-object extension -unique

感谢http://kevin-berridge.blogspot.com/2007/11/windows-powershell.html

我想这个还没有被提到:

find . -type f -exec sh -c 'echo "${0##*.}"' {} \; | sort | uniq -c

加入我自己的变化。我认为这是最简单的,当效率不是一个大问题的时候,它是有用的。

find . -type f | grep -oE '\.(\w+)$' | sort -u

我认为最简单直接的方法是

for f in *.*; do echo "${f##*.}"; done | sort -u

它是根据克里斯托夫的第三种方法改进的。

不需要管道排序,awk可以做所有的事情:

find . -type f | awk -F. '!a[$NF]++{print $NF}'