Shellでディレクト内のファイルの文字コードを一括で変換する

2020年4月28日

はじめに

とある案件で、サーバー移転をすることになりました。
新しいサーバーのデフォルト文字コードが、旧サーバーから変わるとのことで、急遽すべてのファイル(HTML)の文字コードを変換する必要がでました。

手作業でも直せるのですが、10年近く運用していた為、カオスのようなディレクト構造となっており、ファイル数も1000個単位に存在していました。
さすがに白目を向きながら作業することになるので、コマンドで変換をする手段が無いか探してみたらありました。

 

シェルスクリプト

以下のシェルを使用すると、設置したディレクトリ内のすべてのHTMLファイルをUTF-8(-w)に変換して、置き換え(--overwrite)てくれます。

 

convert.sh

#!/bin/sh
for file in `find ./ -name "*.html"`;
do
    echo $file
    nkf -w --overwrite $file
done
exit

 

ちなみに他の文字コードに変換したい場合は以下を利用します。

-w UTF-8
-j JIS
-e EUC
-s シフトJIS

!/bin/sh: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory)

上記のエラーが発生した場合は、シェルの改行コードがCRLFになっていると思います。
これをLFに置き換えてやれば解決すると思います。

sed -i 's/\r//' convert.sh

 

さいごに

私はシェル芸に慣れてないので、もっと良いやり方があるのかもしれません。
今のところは、このシェルの書き方が限界です・・・

深夜のサーバー移転作業からのブログ更新でした。

今日はこの辺でー

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Shell
-, ,