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
Другие вопросы по тегам