Как рекурсивно и автоматически преобразовывать все bmps в png в заданный каталог?

3

У меня есть каталог на моей машине с 100-ю изображениями в нем, примерно половина этих изображений - bmps, а другая половина - png ... Мне нужно сделать все bmps в png, но так как есть так много их я не хочу делать это вручную.

Итак, как я могу рекурсивно и автоматически (возможно, используя скрипт) конвертировать все файлы изображений BMP в файлы изображений PNG в этом каталоге?

Я запускаю Ubuntu GNOME 15.10 с GNOME 3.18.

    
задан Paranoid Panda 25.03.2016 в 00:24
источник

2 ответа

4

Простой цикл for может быть достаточным для одного каталога:

for i in *.bmp
do 
convert $i "${i%.bmp}.png"
done

Чтобы сделать это по-настоящему рекурсивным, есть несколько вариантов, один из методов следующий:

find . -name '*.bmp' -type f -exec bash -c 'convert "
-quality value
" "${0%.bmp}.png"' {} \;

Если вы хотите немного поработать, вы указываете уровень качества для уровня png с помощью синтаксиса:

%pre%

Это занимает значение 1 для самого низкого качества и наименьшего размера файла до 100 для максимального качества и максимального размера файла. Значение по умолчанию - приблизительно 92. Далее подробности здесь ...

    
ответ дан andrew.46 25.03.2016 в 00:31
источник
3

Я бы сказал, что ответ от andrew.46 по-прежнему остается лучшим, поскольку это красноречивый накладчик. Однако здесь есть еще один вариант. Единственное преимущество заключается в том, что для преобразования используется «число текущих номеров файлов» из «общего количества файлов», и оно перекликается с преобразованным файлом. Вы хотите удалить все пробелы в именах файлов, но перед запуском. Это приведет к удалению пробелов: find . -name "* *" | rename 's/ /-/g'

#!/bin/bash

cd $(pwd)    
bmp_files=$(find . -iname "*.bmp")

total=$(echo "$bmp_files" | wc -l)
num=0

echo "There are $total files to be converted."

for f in $bmp_files
do
    ((num++))
    echo "Converting $f, $num/$total"   
    convert "$f" "${f%.bmp}.png" 
    clear
done
    
ответ дан jbrock 26.03.2016 в 06:26