Как рекурсивно и автоматически конвертировать все BMP в PNG в данном каталоге?

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

Так как же я могу рекурсивно и автоматически (возможно, с помощью сценария) преобразовать все файлы изображений bmp в файлы изображений png в этом каталоге?

Я использую Ubuntu GNOME 15.10 с GNOME 3.18.

7
задан 25 March 2016 в 02:24

2 ответа

Простое 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. Более подробная информация здесь...

9
ответ дан 25 March 2016 в 12:24
  • 1
    Извините за не принятие Вашего ценного ответа, но I' ve, выбранный, другой путь и не протестировал, работает ли этот repo на самом деле. Так или иначе спасибо за хорошо осведомленный вклад. – Pawel Debski 6 August 2017 в 00:56

Я сказал бы, что ответ 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
0
ответ дан 25 March 2016 в 12:24
  • 1
    I' m собирающийся комментировать это, потому что это все еще относится к текущим версиям. Я думаю it' s важный, чтобы иметь в виду, что с помощью репозитория, не связанного с проектом в пакете защиты как это, не могла бы быть лучшая идея. Необходимо проверить полностью, кто владелец прежде, чем добавить любой репозиторий, но это специально важно, если пакет будет обрабатывать конфиденциальную информацию. – Leo 6 August 2018 в 08:51

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

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