You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:51