Ubuntu下如何用单行命令批量统计特定前缀的文档数量?
没问题,我给你几个简单易懂的单行命令,完美解决批量统计前缀数量的需求,而且都是Ubuntu原生自带的工具,不需要额外安装:
方法1:适配你当前的文件名格式(前缀+0开头数字)
直接用ls+awk+sort+uniq组合,一行搞定:
cd ~/folder && ls *.jpg | awk -F'0' '{print $1}' | sort | uniq -c | awk '{print $2, $1}'
我给你拆解下每部分的作用:
cd ~/folder:先切换到目标目录,避免误统计其他地方的文件ls *.jpg:列出目录下所有jpg格式的文件awk -F'0' '{print $1}':以0作为分隔符,提取文件名的第一部分(也就是AA、BB、CC这些前缀)sort:把相同前缀的内容排在一起,让后面的uniq能正确统计uniq -c:统计每个前缀出现的次数,默认输出是「次数 前缀」的格式- 最后一个
awk '{print $2, $1}':把输出顺序反过来,变成你想要的「前缀 次数」格式
执行后你就能得到:
AA 2 BB 1 CC 1
方法2:更通用的版本(适配任意数字结尾的文件名)
如果以后你的文件名变成AA123.jpg、BB45.jpg这种非0开头的数字结尾,上面的方法就失效了。这个通用版本用sed去掉文件名末尾的所有数字,适配更多场景:
cd ~/folder && for f in *.jpg; do basename "$f" .jpg | sed 's/[0-9]*$//'; done | sort | uniq -c | awk '{print $2, $1}'
拆解下关键部分:
for f in *.jpg:遍历每个jpg文件basename "$f" .jpg:去掉文件名的.jpg后缀,得到AA001、BB001这类字符串sed 's/[0-9]*$//':去掉字符串末尾的所有数字,只保留前缀- 后面的
sort、uniq -c、awk和方法1作用一样,最终输出你要的格式
另外补充:如果不想切换目录,也可以把~/folder直接加到命令里,比如方法1改成:
ls ~/folder/*.jpg | awk -F'/' '{print $NF}' | awk -F'0' '{print $1}' | sort | uniq -c | awk '{print $2, $1}'
这里第一个awk -F'/' '{print $NF}'是取ls输出的最后一段(因为ls ~/folder/*.jpg会输出完整路径),再继续提取前缀即可。
内容的提问来源于stack exchange,提问作者Grec001
相关产品推荐
相关产品推荐

