クラウド時代のWebアプリケーション・スマートフォンアプリを開発・運用する会社です。 03-4577-8680 03-6673-4950

名称がSJISのファイル・ディレクトリを移動する作業対策

2012-04-03

古いサーバの移設ということを時々します。
どれくらい古いか、どのような使い方をしていたかにもよるわけですが、日本語で、しかもSJISのディレクトリ・ファイル名満載のサーバだったりすることがあります。

古いバージョンのFFFTPがけっこう長いこと使われ続けているので、そのあたりも影響があるかもしれません。UTF-8に対応したのは2007年の話ですし、アップデートしないと本当に危ない。

さて移設には問題がいくつかあります。
・cp/scpがディレクトリ・ファイル名を認識できない場合がある
・zipに固めても4GB以上あると32bit環境で解凍できない

いろいろ試した結果、このようにしました。
1)可能な限りいったんローカルに保存する
2)シェルでSJISを扱えるようにする
3)ディレクトリ・ファイル名をUTF-8に変換する
4)scp/rsyncなどでコピー

1と4はいいとして、2と3はどうするのか、というのが下記です。
(つまり自分用メモです)

2)

locale -a |grep ja

SJISが使えないということはこの時点で ja_JP.sjis が含まれていません。
そこで

localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS

で追加します。

export ja_JP.SJIS

でSJISが表示できます。(ターミナルの文字セットが対応していれば)
< br/>
3)
上記1で、FTP/SFTPソフトなどの設定をSJISにすることができれば、ダウンロードの時点でPCのローカル文字コ ードに変換されるため、そのまま新しいサーバにアップロードできます。可能であればこの方法が一番安全です。
以下の 方法はそれが何らかの理由でできない場合の手段です。ファイル破壊の危険性があるので、おすすめしません。
実行の結果 がどのようになろうとも責任を負うことはできませんのでご承知ください。

convmvというコマンドがありま す。
http://www.j3e.de/linux/convmv/man/
RedHat系であればrpmがあるので、入っていない場合 でも yum install convmv でインストール可能です。
まずこんな感じで実行してみます。

c onvmv -r -f sjis -t utf8 *

これは、カレントディレクトリ以下を再帰的にSJIS→UTF-8へ変更す る「テスト」(いわゆるドライラン)です。実際に変更はされません。

ドライランを実行させた際に表示され るのは、
・既にUTF-8なディレクトリ・ファイル名がある場合
・SJIS→UTF-8に変換できない謎なディレ クトリ・ファイル名がある場合
です。
あきらかにディレクトリ内がSJISである場合に後者が表示され、かつ 見た目には化けていない、という場合は、例えば丸数字(「①」など)が使われているなど、文字コード的に怪しい文字が含ま れている場合が多いようです。
これらはあらかじめ手作業で取り除いておく(=別の名称に変更しておく)ことにな ります。
問題がなければ

convmv -r -f sjis -t utf8 * –notest

で変換が実行されます。