将图像从一种格式批量转换为另一种格式,同时保持目录结构并删除原始图像

将图像从一种格式批量转换为另一种格式,同时保持目录结构并删除原始图像

我看过这个问题,但尽管它可以工作,但仍存在一些问题:

  1. 所有转换后的图像都放在调用该命令的目录中。
  2. 原始图像被保留。

我需要将大约 70,000 个 .tif 和 .jpg 转换为 .png。转换后的文件放在其正常目录中非常重要。

如果这是删除旧文件的最佳方法,我可以在最后对 .tff/.jpg 进行批量 rm。

答案1

for f in $(find . -iname "*.jpg" -type f) ;
    do
    convert $f $(dirname $f)/$(basename -s .jpg $f).png ;
    done
  • find . -iname "*.jpg" -type f:搜索以“.jpg”结尾的文件,不区分大小写
  • $(dirname $f):包含文件 $f 的文件夹的相对路径
  • $(basename -s .jpg $f):不带后缀“.jpg”的文件名

在旧版 Ubuntu 中,basename 可能需要以不同的方式运行:

basename $f .jpg

Convert 是 imagemagick 的一部分(参考见批量处理 tif 图像:将 .tif 转换为 .jpeg) , 安装

sudo apt-get install imagemagick

答案2

对于带有空格的文件名也适用。

移除原件:

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"; rm "$f"
done
IFS=$SAVEIFS

保留原件:删除 < ; rm "$f" > 部分

SAVEIFS=$IFS; IFS=$'\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS

相关内容