J'ai un dossier inclure de nombreux fichiers txt et sous-dossiers qui contient également de nombreux fichiers txt.
Je veux changer l'encodage de tous les fichiers automatiquement. À l'heure actuelle, je sais comment modifier un fichier à l'aide de la commande:
iconv -f gbk -t utf8 sample.txt > sample.wiki
J'ai besoin du nom du fichier non modifié et changer son extension en .wiki. Comment puis-je y parvenir automatiquement?
Vous pouvez parcourir les fichiers .txt
, modifier le codage, enregistrer la sortie dans le fichier .wiki
du même nom à l’aide de l’option -o
de iconv
et, en cas de succès, supprimer le .txt
fichier:
shopt -s globstar ## Enables recursive glob matching
for f in **/*.txt; do
iconv -f gbk -t utf8 -o "${f%.txt}".wiki "$f" && rm "$f"
done
Avertissement:
Si le fichier d'entrée n'est pas dans le codage source donné ou déjà dans le codage cible, iconv
retournera la valeur true sans effectuer d'opération. Par conséquent, le fichier .wiki
ne sera pas créé et le fichier .txt
sera supprimé.
Pour contourner ce problème, vous pouvez enregistrer le STDOUT après conversion dans une variable. Si la variable n'est pas vide, sauvegardez la sortie dans le fichier .wiki
et supprimez le fichier txt
:
shopt -s globstar ## Enables recursive glob matching
for f in **/*.txt; do
out="$(iconv -f gbk -t utf8 "$f")"
[[ -n $out ]] && echo "$out" >"${f%.txt}".wiki && rm "$f"
done