我需要重命名一批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
的文件 - 从那时开始。是什么导致了之前的错误?
答案 0 :(得分:2)
支撑扩展首先在*.{jpg,jpeg,png}
中发生,即它会创建三个单词:*.jpg *.jpeg *.png
。给定目录中没有jpg
和jpeg
个文件,因此*
无法扩展到,因此,它仍然是文字星号。要更改行为,您可以设置nullglob
选项:
shopt -s nullglob
*.jpg
将扩展为空字符串,不会在循环中迭代。