Согласно FHS , / usr / local /
предназначен именно для этого:
Иерархия / usr / local предназначена для использования системным администратором при локальной установке программного обеспечения.
Альтернативой будет / opt
:
/ opt зарезервирован для установки дополнительных пакетов прикладного программного обеспечения.
Пакет, устанавливаемый в / opt, должен располагать свои статические файлы в отдельном дереве каталогов / opt / или / opt /,
Даже в / usr / local
, отдельное дерево полезно для хранения разных пакетов отдельно друг от друга, а также для упрощения обновления, удаления и сохранения нескольких версий одной и той же программы. Выбор между / usr / local
в значительной степени зависит от вас как системного администратора.
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) если ваши имена файлов содержат очень странные символы.
Первая версия гарантирована от таких редких неудобств.
С помощью exiftool
можно сделать:
exiftool -q -r -ext jpg -if '
$FileType eq "BMP" and !print "$Directory/$FileName\0"'. |
xargs -r0 mogrify -format jpg