Comment convertir plusieurs fichiers en encodage UTF-8 à l'aide d'outils de ligne de commande * nix? [dupliquer]

Réponses:

56

iconv convertit entre plusieurs encodages de caractères. Donc, en ajoutant un peu de magie bash et nous pouvons écrire

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

Cela se déroulera iconv -f ascii -t utf-8à tous les fichiers se terminant par .txt, envoyer le fichier recodé dans un fichier avec le même nom , mais se terminant au .utf8.txtlieu de .txt.

Ce n'est pas comme si cela ferait quoi que ce soit à vos fichiers (car l'ASCII est un sous-ensemble de UTF-8), mais pour répondre à votre question sur la conversion d'un encodage.

Vinko Vrsalovic
la source
2
Vous devriez citer var $ i, afin de gérer les noms de fichiers avec des espaces.
Richard Hoskins
Il va faire des choses, il va ajouter une nomenclature pour un ...
jason
Êtes-vous sûr que iconv ajoutera une nomenclature? J'avais l'impression que ce ne serait pas avec UTF-8.
Richard Hoskins
5
Je viens de tester cela avec iconv (GNU libiconv 1.11), et il n’a pas ajouté de nomenclature. Je crois comprendre que iconv n’ajoutera une nomenclature que si elle est présente dans l’entrée, ce qui ne serait pas en ASCII. Les nomenclatures sont problématiques et pas nécessaires avec UTF-8.
Richard Hoskins
2
Si votre version d'iconv ne prend pas en charge le paramètre -o, vous pouvez directement la remplacer par >> pour utiliser la redirection de shell.
rob