基于Bash脚本在指定文件夹及子文件夹中实现文件名对比压缩判断
嘿,我写了一个适配你需求的Bash脚本,完全支持增量处理——只压缩那些还没标记过的JPG文件,咱们来看看具体实现:
#!/bin/bash # 定义目标根目录,可根据实际路径修改 UPLOAD_DIR="./UPLOAD" # 递归遍历所有子目录下的.jpg文件 find "$UPLOAD_DIR" -type f -name "*.jpg" | while read -r jpg_file; do # 提取文件所在的目录路径 file_dir=$(dirname "$jpg_file") # 提取不带.jpg后缀的文件名(比如"photo.jpg" -> "photo") base_name=$(basename "$jpg_file" .jpg) # 构造对应的标记文件路径 orig_file="${file_dir}/${base_name}.orig" # 检查标记文件是否存在:不存在则执行压缩 if [ ! -f "$orig_file" ]; then echo "开始压缩: $jpg_file" # 这里替换为你实际使用的压缩命令,以下是两种常用选项: # 选项1:用jpegoptim(轻量高效,需提前安装:sudo apt install jpegoptim) # jpegoptim --strip-all --max=80 "$jpg_file" # 选项2:用ImageMagick的convert(功能丰富,需提前安装:sudo apt install imagemagick) convert "$jpg_file" -quality 80 "$jpg_file.tmp" && mv "$jpg_file.tmp" "$jpg_file" # 压缩完成后创建标记文件,两种可选方式: # 方式1:创建空标记文件(不保留原文件) touch "$orig_file" # 方式2:备份原文件为.orig(需要保留原文件时启用) # cp "$jpg_file" "$orig_file" else echo "已跳过(已压缩): $jpg_file" fi done echo "所有文件处理完成!"
关键细节说明:
- 增量处理逻辑:通过检查同目录下的
filenameA.orig标记文件,确保只有新增的未压缩JPG才会被处理,重复运行只会扫新增文件,不会重复压缩。 - 兼容特殊文件名:所有变量都用双引号包裹,完美支持带空格、特殊字符的文件名。
- 压缩工具可选:
jpegoptim是专门针对JPG的压缩工具,速度快、质量可控,适合批量处理;convert来自ImageMagick,支持更多格式和高级处理,适合需要自定义压缩参数的场景。
- 标记文件可选:
- 空标记文件:占用空间极小,适合不需要保留原文件的场景;
- 备份原文件:把压缩前的JPG存为
.orig,方便后续恢复,适合需要保留原始资源的场景。
你可以根据自己的实际需求修改压缩命令的参数(比如质量值)和标记文件的生成方式,直接运行脚本即可开始增量压缩啦!
内容的提问来源于stack exchange,提问作者Mapperkids Lee
相关产品推荐
相关产品推荐

