
у меня есть еще одна проблема с UTF-8. Я использую munpack -C $extrdir $file
для автоматического извлечения файлов JPG из писем, которые я получил с помощью fetchmail
. После этого я использую bash
и imagemagick
для обработки изображений, которые я могу получить с помощью find -iname "*.jpg*" -o -iname "*.jpeg*" -o -iname "*.JPEG*" -o -iname "*.JPG*"
. Это отлично работает для большинства изображений, если только к имени файла не добавляются пробелы или специальные символы.
В исходном коде электронного письма имя файла записано как
Content-Disposition: attachment; filename="=?UTF-8?B?V2FuZGVydW5nIFNwaWVsd2VnIDIuSlBH?="
. munpack
сохранить файл как
=XUTF-8XBXV2FuZGVydW5nIFNwaWVsd2VnIDIuSlBHX=
Я мог бы добавить "*XUTF*"
в find
, но тогда другие типы вложений, такие как txt-файлы, imagemagick
также могут быть обработаны. munpack
также заменяет «?» на «X», поэтому я не могу расшифровать имена файлов.
Есть ли у вас решение этой проблемы?
Заранее спасибо!
решение1
Этот обходной путь помог мне. К сожалению, имена файлов утеряны. Но это не то, что мне было нужно.
Используйте munpack
и перенаправьте вывод в файл:
munpack -C $extrdir $file > attachments
Содержимое файла, attachements
которое вы сейчас увидите, было извлечено:
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...
Теперь пройдитесь по каждой строке, проверьте, являются ли они изображениями, и переименуйте их:
while read p; do
if [[ $p == *"image"* ]]
then
FLNM=attach_${num}.jpg
IFS=' (' read -a array <<< "$p"
mv "${array[0]}" "$FLNM"
fi
num=$((num + 1))
done <attachements
Вывод в каталоге будет следующим:
attach_1.jpg
attach_2.jpg
attach_3.jpg