2

我需要编写一个 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?

4

1 回答 1

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- 运行你的实际转换命令
于 2012-11-12T21:30:52.460 回答