рекурсивное преобразование всех файлов BMP в формат JPG, обработка путей с пробелами и получение правильного расширения файла в Linux

#regex #bash #image-processing #path #imagemagick-convert

#регулярное выражение #bash #обработка изображений #путь #imagemagick-конвертировать

Вопрос:

У меня есть файлы с красивыми, удобными для глобуса именами путей, такими как:

 /New XXXX_Condition-selected FINAL/677193  2018-06-08 Xxxx Event-Exchange_FINAL/Xxxxx Dome Yyyy Side/Xxxx_General016 #07-08.BMP
 

( Xxx...Yyyy строки приведены по соображениям конфиденциальности). Конечно, формат не является фиксированным: глубина иерархии папок может варьироваться, но пробелы, буквы и символы, такие как _ , - и # могут отображаться либо как часть пути, либо как часть имени файла, либо и то, и другое.

Моя цель — повторно просмотреть все вложенные папки, найти .Файлы BMP и преобразование их в файлы JPG без «двойных» расширений, таких как .BMP.JPG : другими словами, указанное выше имя файла должно стать

 /New XXXX_Condition-selected FINAL/677193  2018-06-08 Xxxx Event-Exchange_FINAL/Xxxxx Dome Yyyy Side/Xxxx_General016 #07-08.JPG
 

Я могу использовать либо инструменты оболочки bash, либо Python. Вы можете мне помочь?

PS Мне не нужны исходные файлы, поэтому их можно перезаписать. Конечно, решение, которое не перезаписывает их, тоже подойдет — я просто выполню find . -name "*.BMP" -type f -delete команду.

Комментарии:

1. вы уже используете find, прочитайте о find -exec(dir)

2. переименование было бы полезным, поскольку вы используете регулярные выражения

3. Спасибо за ваше любезное предложение. Я разместил свои комментарии в качестве ответа. BR.

Ответ №1:

Не могли бы вы попробовать:

 find . -type f -iname "*.BMP" -exec mogrify -format JPG '{}'  
 

Команда mogrify является инструментом ImageMagick suite и mogrify -format JPG file.BMP эквивалентна convert file.BMP file.JPG .
Вы можете добавить те же параметры, которые принимаются convert такими, как -quality .
Преимущество mogrify заключается в том, что он может выполнять одно и то же преобразование для нескольких файлов одновременно, не указывая выходные (преобразованные) имена файлов.
Если команда выдает предупреждение: mogrify-im6.q16: length and filesize do not match , это означает, что размер изображения, сохраненный в заголовке BMP, не соответствует фактическому размеру блока данных изображения.
Если файлы JPG созданы правильно, вы можете игнорировать предупреждения. В противном случае вам потребуется восстановить файлы BMP, которые вызывают предупреждения.

Если входные и выходные файлы имеют одинаковое расширение (в таком случае преобразование JPG в JPG с изменением размера), исходные файлы перезаписываются. Если у них разные расширения, как в этот раз, исходные файлы BMP не удаляются. Вы также можете удалить их с помощью find .