
eu tenho outro problema com UTF-8. Eu uso munpack -C $extrdir $file
para extrair automaticamente arquivos JPG de e-mails que recebi com arquivos fetchmail
. Depois utilizo bash
e imagemagick
para processar imagens que consigo obter 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 e-mail, 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*"
, find
mas outros tipos de anexos, como arquivos txt, imagemagick
também podem ser processados. munpack
também substitui "?" com "X" é por isso que não consigo decodificar os nomes dos arquivos.
Você tem uma solução para este problema?
Desde já, obrigado!
Responder1
Esta solução alternativa fez isso por mim. Infelizmente, os nomes dos arquivos foram perdidos. Mas não era isso que eu procurava.
Use munpack
e canalize a saída em um arquivo:
munpack -C $extrdir $file > attachments
O conteúdo do attachements
arquivo você verá agora o que foi extraído:
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...
Agora percorra 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