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

我看过这个问题 ,虽然它有一些问题:

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

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

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

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

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

 basename $f .jpg 

转换是imagemagick的一部分(参考参见批量处理tif图像:转换.tif到.jpeg ),以进行安装

 sudo apt-get install imagemagick 

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

要删除原件:

 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