2

我需要编写一个shell脚本。

我写了一个脚本:

for file in *.gif
do
    filename=$(basename "$file")
    filename=${filename%.*}
    convert $file $filename.tlf
done

你认为这对吗?如何添加名称更改?

PS:请不要编辑主题,因为文件名是特殊信息。

4

2 回答 2

3
nr=0
for file in *.gif; do
    nr=$(($nr+1))
    filename="$(basename "$file")"
    filename="${filename%.*}"
    convert "$file" "${nr}_$filename.tlf"
done
于 2013-10-12T21:53:18.520 回答
1

如果你打算使用basename命令而不是参数扩展,你应该通过给它一个扩展后缀来充分利用它。这将用一块石头照顾两只鸟。

nr=0
for file in *.gif; do
  filename="$(( ++nr ))_$(basename "$file" .gif).tlf"
  convert "$file" "$filename"
done

您还可以通过参数扩展来完成所有操作:

nr=0
for file in *.gif; do
  filename="$(( ++nr ))_${file##*/}"
  filename="${filename%.*}"
  convert "$file" "$filename"
done

参数扩展的好处是您不必每次迭代都调用子shell。除非您需要处理大量文件,否则不会有什么不同。

于 2013-10-12T22:17:49.550 回答