2016-03-04 10 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 будет расширяться до нулевой строки и не будет повторяться в течение в цикле.

Смежные вопросы