多くのtxtファイルを含む多くのtxtファイルとサブフォルダーを含むフォルダーがあります。
すべてのファイルのエンコーディングを自動的に変更したい。今、私はコマンドを使用して1つのファイルを変更する方法を知っています:
iconv -f gbk -t utf8 sample.txt > sample.wiki
変更されていないファイルの名前と拡張子を.wikiに変更する必要があります。どうすれば自動的にこれを達成できますか?
.txt
ファイルを反復処理し、エンコードを変更し、iconv
の.wiki
オプションを使用して同じ名前の-o
ファイルに出力を保存し、成功した場合は関連する.txt
ファイル:
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
注意:
入力ファイルが指定されたソースエンコーディングにない場合、または既にターゲットエンコーディングにある場合、iconv
は操作を行わずにtrueを返すため、.wiki
ファイルは作成されず、.txt
ファイル削除されます。
これを回避するには、変数に変換した後、STDOUTを保存します。変数が空でない場合のみ、.wiki
ファイルに出力を保存し、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