#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
.