2016-03-04 28 views
0

我需要重命名一批png格式的,我現在有這個sh文件批量重命名目錄中的文件與多種文件類型

echo Renaming all files. 
echo Please enter a prefix 
read prefix 
echo Please enter a filetype 
read filetype 

j=1; 
for i in *.{jpg,jpeg,png}; 
do mv "$i" "$prefix"-"$j"."$filetype"; 
echo Renaming "$i" to "$prefix"-"$j"."$filetype"; 
let j++; 
done 

echo Renaming Complete 

當我運行這一點,錯過了前兩個文件並返回此

mv: rename *.jpg to on-1.jpg: No such file or directory 
Renaming *.jpg to on-1.png 
mv: rename *.jpeg to on-2.jpg: No such file or directory 
Renaming *.jpeg to on-2.png 

,然後我留下了從on-3.png文件 - 起。什麼導致了以前的錯誤?

回答

2

括號擴展發生在第一*.{jpg,jpeg,png},即它產生三個詞:*.jpg *.jpeg *.png。有沒有jpg也不jpeg文件中指定的目錄,這樣*無關擴大到,因此,它仍然是一個字面星號。要改變行爲,您可以設置nullglob選項:

shopt -s nullglob 

*.jpg將擴大到一個空字符串,並且不會在循環中遍歷。