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

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

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

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

convert png:10020 jpg:10020.jpg

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

решение1

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.

Связанный контент