批量重命名具有多种文件类型的目录中的文件

时间:2016-03-04 15:08:59

标签: bash batch-rename

我需要重命名一批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的文件 - 从那时开始。是什么导致了之前的错误?

1 个答案:

答案 0 :(得分:2)

支撑扩展首先在*.{jpg,jpeg,png}中发生,即它会创建三个单词:*.jpg *.jpeg *.png。给定目录中没有jpgjpeg个文件,因此*无法扩展到,因此,它仍然是文字星号。要更改行为,您可以设置nullglob选项:

shopt -s nullglob

*.jpg将扩展为空字符串,不会在循环中迭代。