You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:17:45