如何统计目录中含无扩展名二进制文件的各类扩展名文件数量及Terraform相关二进制文件的数量与总大小
如何统计目录中含无扩展名二进制文件的各类扩展名文件数量及Terraform相关二进制文件的数量与总大小
我来帮你搞定这两个需求,分两部分给你说明:
一、统计所有文件(含无扩展名)的扩展名分布
你原来的命令只筛选了带.的文件,所以漏掉了无扩展名的二进制文件。我们可以用awk直接处理所有文件的文件名,区分有扩展名和无扩展名的情况,命令如下:
find . -type f | awk -F. '{ # 判断文件是否有扩展名 if (NF == 1 || $NF == "") { ext = "(无扩展名)" } else { # 把扩展名转成小写统一统计 ext = tolower($NF) } count[ext]++ } END { # 按数量倒序输出统计结果 for (e in count) { printf "%-20s %d\n", e, count[e] } }' | sort -k2rn
命令解释:
find . -type f:遍历当前目录下所有普通文件(包括无扩展名的二进制)awk -F.:用.作为分隔符分割文件名NF == 1:表示文件名里没有.,也就是无扩展名;$NF == ""处理文件名以.结尾的特殊情况(比如myfile.),这类也归为无扩展名- 最后用
sort -k2rn按文件数量从多到少排序,看起来更直观
二、统计Terraform相关二进制的数量与总大小
针对你更新的需求,我们可以直接通过文件名匹配Terraform核心二进制和插件,同时统计它们的数量和总大小:
find . -type f \( -name "terraform" -o -name "terraform-provider-*" \) -exec ls -l {} \; | awk '{ count++ total_size += $5 # $5对应ls -l输出中的文件大小(字节) } END { # 转成MB方便查看 printf "Terraform相关二进制文件数量:%d\n总大小:%d 字节(约%.2f MB)\n", count, total_size, total_size/1024/1024 }'
说明:
- 如果你的Terraform插件还有其他命名格式(比如
terraform-*开头的工具),可以在find的条件里补充,比如加-o -name "terraform-*" ls -l输出的第5列是文件的字节数,awk累加得到总大小后转成MB,更易读
备注:内容来源于stack exchange,提问作者anjanesh
相关产品推荐
相关产品推荐

