
Tengo otro problema con UTF-8. Utilizo munpack -C $extrdir $file
para extraer automáticamente archivos JPG de los correos electrónicos que recibí con fetchmail
. Luego uso bash
y imagemagick
para procesar imágenes con las que puedo obtener find -iname "*.jpg*" -o -iname "*.jpeg*" -o -iname "*.JPEG*" -o -iname "*.JPG*"
. Esto funciona bien para la mayoría de las imágenes, siempre que no se agreguen espacios ni caracteres especiales al nombre del archivo.
En el código fuente del correo electrónico, el nombre del archivo se escribe como
Content-Disposition: attachment; filename="=?UTF-8?B?V2FuZGVydW5nIFNwaWVsd2VnIDIuSlBH?="
. munpack
guardar el archivo como
=XUTF-8XBXV2FuZGVydW5nIFNwaWVsd2VnIDIuSlBHX=
Podría agregar "*XUTF*"
a , pero también find
se podrían procesar otros tipos de archivos adjuntos, como archivos txt . también reemplaza "?" con "X" por eso no puedo decodificar los nombres de los archivos.imagemagick
munpack
¿Tiene una solución para este problema?
¡Gracias de antemano!
Respuesta1
Esta solución lo ha hecho por mí. Desafortunadamente, los nombres de los archivos se pierden. Pero eso no era lo que buscaba.
Utilice munpack
y canalice la salida en un archivo:
munpack -C $extrdir $file > attachments
El contenido del attachements
archivo ahora verá lo que se extrajo:
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...
Ahora recorra cada una de las líneas, verifique si son imágenes y cámbieles el nombre:
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
La salida en el directorio será entonces:
attach_1.jpg
attach_2.jpg
attach_3.jpg