Compilándolos todos. Ir a dir, crear dir2utf8.sh
:
#!/bin/bash
# converting all files in a dir to utf8
for f in *
do
if test -f $f then
echo -e "\nConverting $f"
CHARSET="$(file -bi "$f"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$f" -o "$f"
fi
else
echo -e "\nSkipping $f - it's a regular file";
fi
done
Tal vez estés buscando enca
:
Enca es un analizador de charset extremadamente ingenuo. Detecta el conjunto de caracteres y la codificación de los archivos de texto y también puede convertirlos a otras codificaciones utilizando un convertidor integrado o bibliotecas y herramientas externas como libiconv, librecode o cstocs.
Actualmente es compatible con bielorruso, búlgaro, croata, checo, estonio, húngaro, letón, lituano, polaco, ruso, eslovaco, esloveno, ucraniano, chino y algunas codificaciones multibyte independientemente del idioma.
Tenga en cuenta que, en general, la detección automática de la codificación actual es un proceso difícil (la misma secuencia de bytes puede ser texto correcto en múltiples codificaciones). enca
usa heurística basada en el lenguaje que le dices que detecte (para limitar el número de codificaciones). Puedes usar enconv
para convertir archivos de texto a una sola codificación.
Puede obtener lo que necesita utilizando el archivo gnu utils estándar y awk. Ejemplo:
file -bi .xsession-errors
me da:"text/plain; charset=us-ascii"
entonces file -bi .xsession-errors |awk -F "=" '{print $2}'
me da "us-ascii"
Lo uso en scripts así:
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi