Ansible提取并求和:如何汇总多个zip包内的文件总数?
解决方法:Shell命令快速实现Zip文件筛选+文件数求和
嘿,我来帮你搞定这个需求!其实用几行简单的Shell命令就能完成,完全不用复杂的编程知识,下面分两种方式给你讲解:
方式一:分步脚本(清晰易懂,适合新手)
这个脚本会逐个处理符合条件的Zip文件,还会输出每个文件的统计结果,最后给出总和:
# 第一步:设置你的匹配规则,把*特定字符*.zip改成你需要的筛选条件 # 比如要匹配包含"backup"的Zip文件,就写成*backup*.zip total_files=0 for zipfile in *特定字符*.zip; do # 防止没有匹配到任何文件时出错 if [ ! -f "$zipfile" ]; then continue fi # 统计当前Zip内的文件数量:跳过unzip -l的前3行表头,剩下的行数就是文件数 file_count=$(unzip -l "$zipfile" | tail -n +4 | wc -l) echo "👉 $zipfile 包含 $file_count 个文件" # 累加总数 total_files=$((total_files + file_count)) done echo -e "\n✅ 所有符合条件的Zip包内文件总数:$total_files"
怎么用?
- 打开终端,把上面的代码复制到一个新文件里(比如叫
count_zip_files.sh) - 把
*特定字符*.zip替换成你的实际筛选规则:- 匹配文件名开头是
data的:data*.zip - 匹配文件名结尾是
2024的:*2024.zip - 匹配包含
log的:*log*.zip
- 匹配文件名开头是
- 给脚本加执行权限:
chmod +x count_zip_files.sh - 运行脚本:
./count_zip_files.sh
方式二:一行命令版(快速高效)
如果不需要看单个文件的统计结果,只想直接得到总和,用这一行命令就够了:
unzip -l *特定字符*.zip 2>/dev/null | tail -n +4 | wc -l
解释一下:
unzip -l *特定字符*.zip:一次性列出所有符合条件的Zip包内的文件2>/dev/null:忽略可能的错误信息(比如某个Zip包损坏无法读取)tail -n +4:跳过所有Zip包的表头行(每个Zip的前3行是表头,统一跳过)wc -l:统计剩下的所有行数,就是所有文件的总数
这样不管你有多少个符合条件的Zip文件,都能快速算出总文件数啦!
内容的提问来源于stack exchange,提问作者lowtek
相关产品推荐
相关产品推荐

