改进shell算法

时间:2013-10-12 21:48:46

标签: bash shell

我需要编写一个shell脚本。

我写了一个剧本:

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

您认为这是对的吗?如何添加名称更改?

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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。除非您需要处理大量文件,否则它不会产生任何影响。