> Tenho o seguinte comando dentro de um shell
>
> cat email | grep -i 'filename="' > /tmp/file
>
> #> cat /tmp/file
> filename="=?iso-8859-1?Q?can=E7ao.txt?="
> filename="=?iso-8859-1?B?Y2Fu5+NvLnR4dA==?="
>
> Preciso saber como converter essas 2 saídas para o nome correto do
> arquivo que seriam:
> filename=cançao.txt
> filename=canção.txt
>
> Qualquer dica será bem vinda, pois já não sei mais o que pensar.
>
> Obrigado
>
> Ronaldo Araujo


Q: significa quoted-printable.. procure a tabela e use o sed.
=E7 é ç
filename="=?iso-8859-1?Q?can=E7ao.txt?="

B: significa base64
filename="=?iso-8859-1?B?Y2Fu5+NvLnR4dA==?="
echo Y2Fu5+NvLnR4dA== | openssl enc -d -a

se o seu sistema estiver em UTF-8, você precisará
echo Y2Fu5+NvLnR4dA== | openssl enc -d -a | iconv -f iso-8859-1 -t utf-8

#cat anexo
filename="=?iso-8859-1?Q?can=E7ao.txt?="
filename="=?iso-8859-1?B?Y2Fu5+NvLnR4dA==?="

#!/bin/bash
while read line ; do
  test $(cut -d '?' -f 3 <<< $line) == "Q" && {
    echo "filename=\"$(sed -e 's/=E7/ç/g' < <(cut -d '?' -f 4 <<< $line) )\""
    continue
  }
  test $(cut -d '?' -f 3 <<< $line) == "B" && {
    echo "filename=\"$(openssl enc -d -a < <(cut -d '?' -f 4 <<<
$line) | iconv -f iso-8859-1 -t utf-8 )\""
  }

done < anexo

filename="cançao.txt"
filename="canção.txt"

você precisa ver a tabela quoted-printable para trocar todos os demais
caracteres...


-- 
Reinaldo Carvalho

Responder a