Используйте команду 'find' для поиска PNG-файлов, конвейерный вывод в imagemagick для пакетного преобразования


2

У меня есть каталог с тысячами файлов изображений, в основном JPG, но немного PNG. Файлы не имеют расширения, они просто пронумерованы. Мне нужно конвертировать их все в JPG.

Используя find, я могу получить список всех файлов с их типами, и из этого я могу использовать Imagemagick для преобразования из PNG в JPG, указав их тип:

convert png:10020 jpg:10020.jpg

Но я хотел бы сделать это как пакет для всех файлов. Как я могу передать результаты поиска и преобразовать все файлы PNG в JPG?

Ответы:


3
find . -type f | while read IN; do
  if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    convert png:$IN jpg:$IN.jpg;
  fi;
done;

Значение аргументов:

  1. .
    Найти в текущем каталоге

  2. -type f
    Просто найдите файлы, а не каталоги / сокеты / и т.д.

  3. while read IN; do
    Поместите каждое имя файла в переменную INи запустите на нем цикл.

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    Проверьте, является ли файл PNG ...

  5. convert png:$IN jpg:$IN.jpg;
    ... и если это так, преобразовать его.

  6. fi; done;
    Мы сделали!

На этот раз я проверил его, и он работает, преобразуя каталог, полный PNG, без .pngрасширения в JPG.


Я также предлагаю вам использовать -inameопцию (игнорировать регистр) в случае, если это .PNGи нет, .pngили даже .PnGи т. Д.
— arielnmz

@arielnmz Кажется, вы знакомы больше, findчем я. В тот момент, когда вы оставили комментарий, моя команда даже не запустилась ... У меня сейчас все работает.
— BenjiWiebe

Это было бы хорошо, если бы файлы имели расширения, но это не так. Вот почему был задан вопрос об использовании команды file для получения фактического типа файла, а затем для преобразования только тех изображений PNG, которые были найдены.
— Гибискус

@ Гибискус Хорошо, я обновлю свой ответ, чтобы отразить это. Это будет сложно, но не невозможно. :)
— BenjiWiebe

@ Гибискус Последнее редактирование работает для меня. Попробуйте и посмотрите, работает ли он для вас!
— BenjiWiebe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.