![列出树状结构中的所有文件扩展名并计算每个文件扩展名出现的次数](https://linux22.com/image/64304/%E5%88%97%E5%87%BA%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D%E5%B9%B6%E8%AE%A1%E7%AE%97%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0.png)
我正在寻找一个简单的 shell 函数(首选 bash)来列出树形图中的所有文件扩展名并计算每个文件扩展名出现的次数。
例如,list_extensions .
会返回类似以下内容:
pdf 134
tex 42
cpp 30
...
一个优点是还可以计算不带扩展名的文件。
答案1
正如 don_crissti 在评论中所述,这个问题是重复的,可以找到答案这里。但是,您还想对不带扩展名的文件进行计数。这是我的尝试:
echo no_ext $(find . -type f -exec sh -c 'echo $(basename "{}")' \; | grep -v '\.' | wc -l)
我将尝试解释后续命令及其目的。
首先,我们使用find来查找常规文件,并通过basename命令以相当繁琐的方式转发它们各自的路径。
find . -type f -exec sh -c 'echo $(basename "{}")' \;
其次,我们可以在反转模式下使用 grep 简单地搜索不带句点的文件名。
grep -v
最后一步是计算行数。
wc -l
这可以输入到 echo 中。将所有这些结果组合到上面的命令中。
编辑:我用命令替换将标签(在本例中为“no_ext”)连接到计算出的数字。您还可以在没有回显的情况下单独运行括号之间的命令,以仅打印计算出的数字。