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

如何编写通用Bash脚本 递归匹配多格式图片调用ImageMagick转PDF

多格式图片递归转Kindle适配PDF通用Bash脚本

实现逻辑说明

原脚本存在两个核心问题:一是通配符匹配默认大小写敏感,无法覆盖大写后缀的图片;二是直接拼接通配符无法同时匹配多类后缀,也未处理文件名排序、带空格路径兼容的问题,容易出现页序错乱、路径报错的情况。
通用脚本实现以下特性:

  • 自动匹配所有.jpg/.jpeg/.png后缀的图片,完全不区分大小写
  • 自动按文件名自然排序,保证漫画页码顺序正确
  • 兼容带空格、特殊字符的目录与文件名
  • 保持原有逻辑:按目录为单位生成PDF,输出路径与原目录结构对应
  • 自动跳过无图片的空目录,不会生成无效空文件

完整脚本代码

#!/bin/bash
# 开启bash扩展匹配:不区分大小写匹配文件、无匹配时返回空值
shopt -s nullglob nocaseglob
root_dir="$(pwd)"
echo "工作根目录: $root_dir"

# 先遍历输出所有待处理目录
echo "将按以下顺序处理目录:"
find . -type d -print

# 逐目录处理图片转PDF
find . -type d | while read -r target_dir; do
    echo "正在处理目录: $target_dir"
    # 收集当前目录下所有jpg/jpeg/png格式图片
    img_files=()
    for suffix in jpg jpeg png; do
        img_files+=("$target_dir"/*."$suffix")
    done
    # 过滤无效路径,自然排序保证漫画页序正确
    mapfile -t sorted_imgs < <(printf "%s\n" "${img_files[@]}" | grep -vE '\*$' | sort -V)
    
    # 目录下无对应图片则跳过
    if [ ${#sorted_imgs[@]} -eq 0 ]; then
        echo "目录 $target_dir 无符合要求的图片,跳过"
        continue
    fi

    # 生成输出PDF路径,处理根目录特殊情况
    if [ "$target_dir" = "." ]; then
        output_pdf="$root_dir/根目录图片合集.pdf"
    else
        output_pdf="$root_dir/${target_dir#./}.pdf"
    fi
    # 自动创建输出路径所需的父目录,避免多级目录报错
    mkdir -p "$(dirname "$output_pdf")"

    # 调用ImageMagick转换
    convert "${sorted_imgs[@]}" "$output_pdf"
    echo "已生成: $output_pdf"
done

使用方法

  • 将上述代码保存为img2pdf-kindle.sh,放到存放漫画的根目录下
  • 给脚本添加执行权限:chmod +x img2pdf-kindle.sh
  • 执行脚本即可:./img2pdf-kindle.sh

常见问题说明:如果运行时提示convert命令不存在,先确认ImageMagick已正确安装,Debian/Ubuntu系可执行sudo apt install imagemagick安装;如果遇到PDF转换权限报错,可修改/etc/ImageMagick-6/policy.xml中PDF相关的权限限制,这是ImageMagick默认的安全策略导致的。

内容的提问来源于stack exchange,提问作者Tobi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:15:29