У меня есть каталог на моей машине с сотнями изображений в нем, примерно половина этих изображений - bmp, а другая половина - pngs ... Мне нужно превратить все bmp в pngs, но так как есть много их я не хочу делать это вручную.
Так как же я могу рекурсивно и автоматически (возможно, с помощью сценария) преобразовать все файлы изображений bmp в файлы изображений png в этом каталоге?
Я использую Ubuntu GNOME 15.10 с GNOME 3.18.
Простое for
цикл мог бы быть достаточно для единственного каталога:
for i in *.bmp
do
convert $i "${i%.bmp}.png"
done
Для создания этого действительно рекурсивным существует несколько вариантов, один метод следующий:
find . -name '*.bmp' -type f -exec bash -c 'convert "$0" "${0%.bmp}.png"' {} \;
Если Вы хотите плескаться немного больше, Вы указываете уровень качества для png уровня при помощи синтаксиса:
-quality value
Это принимает значение 1 по самому низкому качеству и самому маленькому размеру файла к 100 по самому большому качеству и самому большому размеру файла. Значение по умолчанию - приблизительно 92. Более подробная информация здесь...
Я сказал бы, что ответ 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