我看过这个问题,但尽管它可以工作,但仍存在一些问题:
- 所有转换后的图像都放在调用该命令的目录中。
- 原始图像被保留。
我需要将大约 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