Переименуйте несколько файлов последовательно и запуска тем же префиксом

У меня есть папка, содержащая как файлы 1500 года, я хочу переименовать их автоматически через терминал или сценарий оболочки следующим образом: "prefix_number.extension".
Пример: cin_1.jpg, cin_2.png...

1
задан 9 January 2019 в 18:14

2 ответа

Попытка:

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
2
ответ дан 3 December 2019 в 07:22

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

Источник: Как переименовать несколько файлов последовательно из командной строки?

1
ответ дан 3 December 2019 в 07:22

Другие вопросы по тегам:

Похожие вопросы: