我需要编写一个shell脚本来将图像格式从.png转换为.tif。脚本如下:
#!/bin/sh
for f in `ls *.png`
do
convert $f $f.tif
done
但这样做会将.tif格式附加到现有文件名。即如果图像是abc.png,则$ f将具有abc.png,并且在转换文件名后变为abc.png.tif。这不是我想要的。我需要它是abc.tif。如何操作$ f来删除.png?
答案 0 :(得分:6)
这应该适合你:
#!/bin/bash
for file in *.png
do
filename=$(basename "$file")
filename=${filename%.*}
convert $file $filename.tif
done
这是如何工作的逐行演练:
for file in *.png
- 您不需要命令替换ls *.png
来获取扩展名为png
的文件列表。通配符*
将在shell中自动扩展以匹配cwd中的文件列表;在这种情况下,文件列表以.png
结尾。filename=$(basename "$file")
- 这只适用于防御性编程;它获取文件的实际名称filename=${filename%.*}
- 这会从filename
convert $file $filename.tif
- 运行您的实际转换命令