Munpack и utf-8 имена файлов в приложениях
У меня есть другая проблема 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