Используйте команду '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.

BenjiWiebe
источник
Я также предлагаю вам использовать -inameопцию (игнорировать регистр) в случае, если это .PNGи нет, .pngили даже .PnGи т. Д.
arielnmz
@arielnmz Кажется, вы знакомы больше, findчем я. В тот момент, когда вы оставили комментарий, моя команда даже не запустилась ... У меня сейчас все работает.
BenjiWiebe
Это было бы хорошо, если бы файлы имели расширения, но это не так. Вот почему был задан вопрос об использовании команды file для получения фактического типа файла, а затем для преобразования только тех изображений PNG, которые были найдены.
Гибискус
@ Гибискус Хорошо, я обновлю свой ответ, чтобы отразить это. Это будет сложно, но не невозможно. :)
BenjiWiebe
@ Гибискус Последнее редактирование работает для меня. Попробуйте и посмотрите, работает ли он для вас!
BenjiWiebe