У меня есть папка, содержащая как файлы 1500 года, я хочу переименовать их автоматически через терминал или сценарий оболочки следующим образом: "prefix_number.extension".
Пример: cin_1.jpg, cin_2.png...
Попытка:
count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done
Или, если Вы предпочитаете свои команды, распространенные по нескольким строкам:
count=0
for f in *
do
[ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"
done
count=0
Это инициализирует переменную count
обнулять.
for f in *; do
Это запускает цикл по всем файлам в текущем каталоге.
[ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"
[ -f "$f" ]
тесты, чтобы видеть, если файл $f
регулярный файл (не каталог).
Если $f
регулярный файл, затем перемещение (mv
) команда выполняется. -i
говорит mv
не перезаписывать любые существующие файлы без спроса. "cin_$((++count)).${f##*.}"
название нового файла. cin_
префикс. $((++count))
возвращает значение count
после того, как это было увеличено. ${f##*.}
расширение файла $f
.
done
Это отмечает конец цикла.
Рассмотрите каталог с этими тремя файлами:
$ ls
alpha.jpg beta.png gamma.txt
Давайте выполним нашу команду:
$ count=0; for f in *; do [ -f "$f" ] && mv -i "$f" "cin_$((++count)).${f##*.}"; done
После выполнения нашей команды файлы в каталоге теперь:
$ ls
cin_1.jpg cin_2.png cin_3.txt
A rename
острота:
rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *
Это соответствует каждому файлу точке на ее имя (последний, если несколько), и переименовывает часть до точки с cin_
сопровождаемый числом постепенного увеличения и точкой. С -n
отметьте это просто печатает то, что это сделало бы, удалило бы его для выполнения переименования.
$ ls
a.jpg b.jpg d.png e.png
$ rename -n 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *
rename(a.jpg, cin_1.jpg)
rename(b.jpg, cin_2.jpg)
rename(d.png, cin_3.png)
rename(e.png, cin_4.png)
$ rename 's/.+\./our $i; sprintf("cin_%d.", 1+$i++)/e' *
$ ls
cin_1.jpg cin_2.jpg cin_3.png cin_4.png
Источник: Как переименовать несколько файлов последовательно из командной строки?