1

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

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

Используйте 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .