如何在Ubuntu 20.04上用ImageMagick批量将TIF转PNG并保留原名?
批量转换多层文件夹中的TIF图片为PNG(Ubuntu 20.04 + ImageMagick)
方法一:用find命令直接处理
这是最便捷的方式,递归遍历顶层目录下所有TIF文件,自动完成格式转换并保留原路径和文件名(仅替换后缀):
find /path/to/top-directory -type f -name "*.TIF" -exec convert {} $(dirname {})/$(basename {} .TIF).png \;
参数解释:
/path/to/top-directory:替换成你的顶层文件夹实际路径-type f:只处理文件,排除文件夹-name "*.TIF":匹配所有大写后缀的TIF文件,若存在小写tif文件,改成-iname "*.tif"可忽略大小写匹配$(dirname {}):提取当前文件的所在目录,保证转换后的PNG和原TIF在同一文件夹$(basename {} .TIF):去掉原文件的.TIF后缀,再拼接.png得到新文件名
如果文件名包含空格,用下面的写法避免报错:
find /path/to/top-directory -type f -name "*.TIF" -print0 | xargs -0 -I {} convert {} $(dirname {})/$(basename {} .TIF).png
方法二:写Shell脚本实现带跳过逻辑的转换
如果需要跳过已转换的PNG文件(避免重复操作),可以用以下脚本:
创建convert_tif_png.sh文件,内容如下:
#!/bin/bash # 替换成你的顶层目录路径 TOP_DIR="/path/to/top-directory" # 遍历所有TIF文件 find "$TOP_DIR" -type f -name "*.TIF" | while read -r tif_file; do # 生成对应PNG文件名 png_file="${tif_file%.TIF}.png" # 检查PNG是否已存在,不存在才转换 if [ ! -f "$png_file" ]; then echo "转换中:$tif_file → $png_file" convert "$tif_file" "$png_file" else echo "已存在,跳过:$png_file" fi done
赋予脚本执行权限并运行:
chmod +x convert_tif_png.sh ./convert_tif_png.sh
方法三:用parallel加速多核转换
如果图片数量极多,想利用CPU多核加速,先安装parallel工具:
sudo apt install parallel
然后执行转换命令:
find /path/to/top-directory -type f -name "*.TIF" | parallel convert {} {.}.png
说明:
{.}是parallel的内置占位符,自动生成不带后缀的文件名,无需手动拼接路径- 该命令会自动分配任务到多个CPU核心,大幅提升批量转换速度
内容的提问来源于stack exchange,提问作者Aloysia de Argenteuil
相关产品推荐
相关产品推荐

