如何统计zip包中仅PDF文件数量,排除.metadata后缀文件
问题描述
我能统计zip包内的文件总数,但没法排除带.metadata后缀的文件。怎么只统计这个zip包中的PDF文件数量?我试过用unzip -l 0532.zip查看包内文件,还试过unzip -l 0532.zip | awk '{count = $2} END{print count}'命令,但还是没法排除.metadata文件,统计结果还是总数1634。
相关命令输出
unzip -l 0532.zip 输出示例:
742248 05-31-2023 15:19 /pdf/0531/CP-1960-5266M.pdf 4125 05-31-2023 15:19 /pdf/0531/CB-CB-177729.pdf.metadata 1221395 05-31-2023 15:19 /pdf/0531/CB-CB-177729.pdf 4128 05-31-2023 15:19 /pdf/0531/CP-1988-10086.pdf.metadata 243050 05-31-2023 15:19 /pdf/0531/CP-1988-10086.pdf 4125 05-31-2023 15:19 /pdf/0531/R-1978448.pdf.metadata 5735942 05-31-2023 15:19 /pdf/0531/R-1978448.pdf ....... .... .... ....... ..... .... --------- ------- 2152688064 1634 files
之前尝试的命令及结果:
unzip -l 0532.zip | awk '{count = $2} END{print count}'
输出:
1634
解决方案
以下几种方法可以精准统计zip包中的PDF文件数量:
方法1:grep+wc组合
直接过滤出所有以.pdf结尾的文件行,再统计行数:unzip -l 0532.zip | grep -E '\.pdf$' | wc -l原理:
grep -E '\.pdf$'匹配仅以.pdf结尾的条目,wc -l统计匹配到的行数,即为PDF文件总数。方法2:awk直接计数
用awk遍历输出内容,遇到PDF文件就累加计数:unzip -l 0532.zip | awk '/\.pdf$/ {count++} END{print count}'原理:awk对每一行进行匹配,符合
\.pdf$规则的行触发计数器count加1,最后输出最终计数。方法3:zipinfo替代(部分系统支持)
如果你的系统安装了zipinfo,可以用它替代unzip -l,逻辑一致:zipinfo 0532.zip | grep -E '\.pdf$' | wc -l
注:上述命令只会统计文件,不会误算目录,因为unzip -l/zipinfo中目录的行不会以.pdf结尾。
内容的提问来源于stack exchange,提问作者thichxai
相关产品推荐
相关产品推荐

