Перебирайте файлы и конвертируйте файлы BMP в JPG

Согласно FHS , / usr / local / предназначен именно для этого:

Иерархия / usr / local предназначена для использования системным администратором при локальной установке программного обеспечения.

Альтернативой будет / opt :

/ opt зарезервирован для установки дополнительных пакетов прикладного программного обеспечения.
Пакет, устанавливаемый в / opt, должен располагать свои статические файлы в отдельном дереве каталогов / opt / или / opt /,

Даже в / usr / local , отдельное дерево полезно для хранения разных пакетов отдельно друг от друга, а также для упрощения обновления, удаления и сохранения нескольких версий одной и той же программы. Выбор между / usr / local в значительной степени зависит от вас как системного администратора.

3
30.08.2017, 21:57
2 ответа
while IFS='' read -rd '' filename; do 
  [[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
      && mogrify -format jpg "$filename"
done < <(LC_ALL=C find . -maxdepth 1 -name '*.jpg' -print0)

будет работать, при условии, что ваша версия file выводит image/x-ms-bmp при передаче файла BMP в качестве аргумента file -b --mime-type. В противном случае вам придется модифицировать сценарий.

Многие пользователи согласятся на более простую версию

for filename in ./*.jpg; do 
  [[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
      && mogrify -format jpg "$filename"
done

, которая, однако, не сработает при некоторых обстоятельствах: 1) если у вас очень большое количество файлов с очень длинными именами (скажем, 30000 имен файлов средней длины) 2) если ваши имена файлов содержат очень странные символы.

Первая версия гарантирована от таких редких неудобств.

3
27.01.2020, 21:18

С помощью exiftoolможно сделать:

exiftool -q -r -ext jpg -if '
  $FileType eq "BMP" and !print "$Directory/$FileName\0"'. |
  xargs -r0 mogrify -format jpg
1
27.01.2020, 21:18

Теги

Похожие вопросы