Compilandoli tutti. Vai a dir, crea 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
Forse stai cercando enca
:
Enca è un analizzatore di set di caratteri estremamente ingenuo. Rileva il set di caratteri e la codifica dei file di testo e può anche convertirli in altre codifiche utilizzando un convertitore integrato o librerie e strumenti esterni come libiconv, librecode o cstocs.
Attualmente supporta bielorusso, bulgaro, croato, ceco, estone, ungherese, lettone, lituano, polacco, russo, slovacco, sloveno, ucraino, cinese e alcune codifiche multibyte indipendentemente dalla lingua.
Si noti che in generale, il rilevamento automatico della codifica corrente è un processo difficile (la stessa sequenza di byte può essere testo corretto in più codifiche). enca
utilizza l'euristica basata sulla lingua che gli dici di rilevare (per limitare il numero di codifiche). Puoi usare enconv
per convertire i file di testo in una singola codifica.
Puoi ottenere ciò di cui hai bisogno usando il file gnu utils standard e awk. Esempio:
file -bi .xsession-errors
mi dà:"text/plain; charset=us-ascii"
quindi file -bi .xsession-errors |awk -F "=" '{print $2}'
mi restituisce "us-ascii"
Lo uso negli script in questo modo:
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi