我需要編寫一個shell腳本。改進shell算法
我寫的腳本:
for file in *.gif
do
filename=$(basename "$file")
filename=${filename%.*}
convert $file $filename.tlf
done
這是正確的在您看來?我如何添加名稱更改?
PS:請不要編輯主題,因爲文件名稱是特殊信息。
我需要編寫一個shell腳本。改進shell算法
我寫的腳本:
for file in *.gif
do
filename=$(basename "$file")
filename=${filename%.*}
convert $file $filename.tlf
done
這是正確的在您看來?我如何添加名稱更改?
PS:請不要編輯主題,因爲文件名稱是特殊信息。
nr=0
for file in *.gif; do
nr=$(($nr+1))
filename="$(basename "$file")"
filename="${filename%.*}"
convert "$file" "${nr}_$filename.tlf"
done
不要忘記引號。 – kojiro
如果你打算使用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每次迭代。除非你需要處理大量的文件,否則不會有什麼區別。
注:(1)名稱的排列順序與'* .gif'生成的順序不同。這些名字將按字母順序生成。 (2)'basename'操作什麼都不做。你可以寫'filename = $(basename「$ file」.gif)「來刪除後綴,或者你可以在下一行做你的操作。 (3)你需要一個計數器和一個增量操作:循環外的'counter = 1','convert'的第二個參數'$ {counter} _ $ filename.tlf'和'((counter ++))'或者類似於增加計數器。 –
在人們花時間回答問題後,請不要污衊您的問題。這對於試圖回答你的人來說是不公平的。 –