Mac系统中如何递归获取所有文件的扩展名列表?
问题:Mac系统递归获取完整文件扩展名列表
需求是在Mac系统中递归搜索所有文件,获取包含tar.gz、txt、pdf、png、jpg等的完整扩展名列表。
已尝试以下命令,但仅得到"txt",无法获取其他扩展名:
find . | grep '\.'| tail -c 4 ls -lR | grep '\.'| tail -c 4
示例文件目录结构:
$ tree . ├── foobar.tar.gz ├── 02_quest_cbc.pdf ├── 16_iron_panel.pdf ├── 16_lots.pdf ├── 18_cbc.pdf ├── 20_kaiser.txt ├── com │ ├── 1.png │ ├── 2.png │ ├── project.txt │ └── readme.txt └── txt 1 directory, 11 files
解决方案
方法1:find+awk组合(支持多后缀,自动去重)
find . -type f | awk -F. ' NF>1 { ext = substr($0, index($0, ".")) sub(/^\./, "", ext) print ext } ' | sort | uniq
find . -type f:递归遍历所有文件(跳过目录)awk逻辑:只处理带扩展名的文件,提取从第一个.开始的完整后缀,去掉开头的.后输出sort | uniq:对结果排序并去重,避免重复输出相同扩展名
方法2:find+sed组合(更简洁)
find . -type f -name "*.*" | sed -E 's/^.*\.//' | sort | uniq
find . -type f -name "*.*":只筛选带.的文件sed -E 's/^.*\.//':用正则替换掉最后一个.之前的所有内容,直接得到完整扩展名sort | uniq:排序去重
执行上述命令后,示例目录会输出:
pdf png tar.gz txt
内容的提问来源于stack exchange,提问作者davidjhp
相关产品推荐
相关产品推荐

