CentOS 递归遍历所有子目录图片压缩脚本
功能:
- 递归遍历目标文件夹所有子文件夹
- 图片尺寸缩至原图 60%,JPG 质量 70
- 原路径直接覆盖,不生成新目录、不移动文件
- 支持 jpg/jpeg/png,跳过其它格式
- 不备份原图(磁盘紧张专用)
1. 安装依赖
bash
运行
yum install ImageMagick -y
2. 创建脚本 compress_img.sh
bash
运行
#!/bin/bash
# 图片递归压缩脚本 - 原图60%尺寸 直接覆盖
# 支持格式:jpg jpeg png
# 递归所有子目录,按原路径覆盖保存
# ========== 配置项 修改这里 ==========
# 图片根目录(改成你的图片总目录绝对路径)
ROOT_DIR="/data/www/upload"
# 缩放比例 60%
SCALE="60%"
# jpg压缩质量 0-100
QUALITY=70
# ======================================
# 判断目录是否存在
if [ ! -d "${ROOT_DIR}" ];then
echo "错误:目录 ${ROOT_DIR} 不存在!"
exit 1
fi
echo "开始递归扫描并压缩目录:${ROOT_DIR}"
echo "缩放比例:${SCALE} 画质质量:${QUALITY}"
echo "=========================================="
# 递归查找所有图片
find "${ROOT_DIR}" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read file; do
echo "正在处理:${file}"
# 压缩缩放,直接覆盖原文件
convert "${file}" \
-resize "${SCALE}" \
-quality "${QUALITY}" \
"${file}"
if [ $? -eq 0 ];then
echo "✅ 处理完成:${file}"
else
echo "❌ 处理失败:${file}"
fi
echo "----------------------------------------"
done
echo "全部图片处理完毕!"
3. 使用方法
- 修改脚本内
ROOT_DIR="/data/www/upload"为你的图片根目录 - 赋予执行权限
bash
运行
chmod +x compress_img.sh
- 执行
bash
运行
./compress_img.sh
关键特性说明
- 递归所有子文件夹:多层目录不用手动进子文件夹
- 原路覆盖:压缩后直接替换原图片,路径、文件名完全不变
- 仅缩小不放大:图片本身小于 60% 尺寸不会拉伸失真
- 自动跳过非图片文件
- 输出日志,成功 / 失败一目了然
可选增强(PNG 极致压缩)
如需 PNG 进一步瘦身,安装工具:
bash
运行
yum install optipng -y
在脚本 done 前添加一段,对 png 二次无损压缩:
bash
运行
# PNG额外无损压缩
find "${ROOT_DIR}" -type f -iname "*.png" | while read png;do
optipng -o2 "${png}"
done
重要提醒
脚本直接覆盖原图,无法恢复!
建议首次执行前先备份整个图片目录,防止压缩过度模糊。