2016-03-04 88 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将扩大到一个空字符串,并且不会在循环中遍历。