以下の内容はhttps://pslabo.hatenablog.com/entry/2020/01/10/151528より取得しました。


個別の文字コードで保存されているテキストファイルをUTF-8に変換する

あるディレクトリ以下に複数のサブディレクトリがあり、その中に更に日本語、中国語のディレクトリに分かれて情報が保管されているフォルダがありました。

たとえば、こんなカンジです。

\project\
         subproject1\
                      JP\
                      CN\
         subproject2\
                      JP\
                      CN\

今どきはそういうファイルはUnicodeで保存されているはずですが、過去のファイルは言語ごとの個別の文字コードで保存されているので扱いが微妙に面倒です。しかも単なるテキストファイルかつ何かのシステムと連携してもいないファイルなのでまずは中国語のディレクトリのファイルをUTF-8に変換したくなったので方法を考えてみました。

もっとも単純に行おうと思ったら、ワンライナーでこういう方法です。

find . -type f -name '*.txt' | 
  grep 'CN' | 
  xargs -Ifilename iconv -f GB18030 -t UTF-8 filename -o filename

しかしこの方法だとファイルのタイムスタンプがすべて変わってしまいます。

ファイルの内容は文字コード変換されたことを除けば論理的に同一なのにファイルのタイムスタンプが変わっているのは不適切だと思うので、touch コマンドで次の方法に復元させつつファイルを上書きすることを考えてみました。

for filename in $( find . -type f -name '*.txt' | grep 'CN' ) ;
do
  ls -l ${filename}
  iconv --from-code=GB18030 --to-code=UTF-8 ${filename} --output ${filename}.utf8
  touch --reference=${filename} ${filename}.utf8
  mv ${filename}.utf8 ${filename}
  ls -l ${filename}
done



以上の内容はhttps://pslabo.hatenablog.com/entry/2020/01/10/151528より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14