Munpack и имена файлов utf-8 в приложениях

848
Markus

У меня есть еще одна проблема 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

1 ответ на вопрос

0
Markus

Этот обходной путь сделал это для меня. К сожалению, имена файлов потеряны. Но это было не то, что я хотел.

Используйте 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_$.jpg IFS=' (' read -a array <<< "$p" mv "$" "$FLNM" fi num=$((num + 1)) done <attachements 

Выходные данные в каталоге будут:

attach_1.jpg attach_2.jpg attach_3.jpg