Munpack e utf-8 nomes de arquivos em anexos

1

Eu tenho outro problema UTF-8. Eu uso munpack -C $extrdir $file para extrair automaticamente arquivos JPG de e-mails que recebi com fetchmail . Depois, uso bash e imagemagick para processar imagens que posso obter com find -iname "*.jpg*" -o -iname "*.jpeg*" -o -iname "*.JPEG*" -o -iname "*.JPG*" . Isso funciona bem para a maioria das imagens, desde que nenhum espaço ou caractere especial seja adicionado ao nome do arquivo.

No código fonte do email, o nome do arquivo é escrito como

Content-Disposition: attachment; filename="=?UTF-8?B?V2FuZGVydW5nIFNwaWVsd2VnIDIuSlBH?=" 

munpack salve o arquivo como

=XUTF-8XBXV2FuZGVydW5nIFNwaWVsd2VnIDIuSlBHX=

Eu poderia adicionar "*XUTF*" a find , mas outros tipos de anexos, como os arquivos txt, também podem ser processados por imagemagick . munpack também substitui "?" com "X" é por isso que não consigo decodificar os nomes dos arquivos.

Você tem uma solução para esse problema?

Obrigado antecipadamente!

    
por Markus 30.09.2015 / 13:44

1 resposta

0

Esta solução alternativa fez isso por mim. Infelizmente, os nomes dos arquivos estão perdidos. Mas isso não era o que eu procurava.

Use munpack e canalize a saída em um arquivo:

munpack -C $extrdir $file > attachments

O conteúdo do arquivo attachements você verá o que foi extraído:

=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...

Agora faça um loop em cada uma das linhas, verifique se são imagens e renomeie-as:

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

A saída no diretório será então:

attach_1.jpg
attach_2.jpg
attach_3.jpg
    
por 02.10.2015 / 14:32