Ubuntu下调整命令筛选目录内指定像素大小的PNG/JPG图片并导出日志
失效原因
原有命令仅适配PNG格式的file输出规则,file命令对不同图片格式的尺寸输出格式存在差异:
PNG格式尺寸输出为[宽] x [高](x两侧带空格),JPG/JPEG格式尺寸输出为[宽]x[高](x两侧无空格)。原有sed正则只能匹配带空格的PNG尺寸格式,JPG格式的行未被正则替换,会直接输出原始结果,导致后续awk无法提取宽度做筛选。
适配多格式的命令
以下命令同时支持PNG、JPG、JPEG格式,兼容大小写后缀,可自定义筛选规则,结果直接写入日志文件:
# 示例:筛选宽度小于250的所有图片,结果写入invalid_images.log find . -type f \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' \) -exec file {} \; | \ sed -E 's/(.*\.(png|jpg|jpeg)):.* ([0-9]+)( x |x)([0-9]+).*/\3 \5 \1/I' | \ awk 'int($1) < 250 {print}' > invalid_images.log
自定义修改说明
- 调整筛选规则:修改
awk部分的判断逻辑即可,常用规则参考:- 筛选宽度大于1000的图片:
int($1) > 1000 - 筛选高度小于500的图片:
int($2) < 500 - 筛选宽高都小于300的图片:
int($1) < 300 && int($2) < 300
- 筛选宽度大于1000的图片:
- 日志输出配置:把末尾的
invalid_images.log替换为你需要的日志路径即可,默认覆盖原有日志,需要追加写入的话把>改为>> - 后续批量删除:如果要直接删除日志中所有不符合要求的图片,执行
awk '{print $3}' invalid_images.log | xargs rm -f即可。
内容的提问来源于stack exchange,提问作者A.Marcus
相关产品推荐
相关产品推荐

