У меня есть каталог, содержащий большое количество файлов изображений, некоторые из которых находятся в подкаталогах. Мне нужно переименовать все файлы изображений, соответствующие *.png, *.jpg, *.jpeg, *.bmp, *.gif используя простой шаблон для переименования:

  • одинаковый префикс для всех файлов;
  • число с дополняющими нулями и напечатанное в виде шестнадцатеричной строки.

Моя цель - назначить уникальное имя всем файлам изображений независимо от их расширения, чтобы я мог затем преобразовать их в один и тот же формат изображений без риска перезаписи этих файлов с одинаковыми именами.

Я писал сценарий для выполнения описанной выше процедуры (для списка каталогов меня вдохновил фрагмент кода этого ответа).

for root, dirs, filenames in os.walk(path):
    for filename in filenames:
        if filename.endswith((".jpeg", ".jpg", ".png", ".gif", ".bmp")):
            # rename file

Мне было интересно, была ли какая-либо команда bash или powershell для выполнения описанной выше процедуры.

1 ответ1

1

Я очень хорошо говорю на Bash, но я уверен, что вы могли бы сделать то же самое в Power Shell. Я предполагаю, что вы собираетесь конвертировать в формат .jpg и хранить все файлы в каталоге ./output/. Мой сценарий будет выглядеть так:

j=0;
for i in `find . -type f \( -iname *.jpg -o -iname *.jpeg -o -iname *.png -o -iname *.gif -o -iname *.bmp \)`
do
    j=$(($j+1))
    convert $i output/`printf "%06X" $j`.jpg
done

Этот скрипт запустит счетчик '$ j' с 0. Затем он находит все файлы, которые имеют тип file (а не каталоги, символические ссылки или другие подобные вещи) и соответствуют указанным вами расширениям без учета регистра. () Группирует ряд элементов, каждый из которых объединяется вместе со спецификатором -o OR для команды find.

Мы используем цикл for, чтобы просмотреть все найденные файлы, отмечая их знаком $ i.

Внутри цикла я увеличиваю счетчик $ j.

Затем я преобразую имя файла, которое я нашел, в .jpg и выведу в каталог ./output/.

Имя файла с шестнадцатеричным номером от 0 до шести цифр с помощью команды printf.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .