2011年2月2日水曜日

WinSCPと改行コード

最近改行コードネタが多いのですが、WinSCPと改行コードの問題について書きます。

私は普段、WinSCPというソフトを使って自分のPC(Windows)で作成したファイルをLinuxサーバに転送しています。

先日、あるファイルがWindowsの改行コードのままサーバに転送されていることがわかりました。
(参考までに、WindowsとLinuxでは改行コード(EOL)の種類が異なります。WindowsはCRLF、UNIX系OSはLFです。この違いのために、問題が発生することがあります。)

原因を調べるために色々実験したところ、以下のことがわかりました。

1.ファイルをサーバに転送する時のWinSCPの動作

・ASCIIモードの場合
改行コードはUNIX形式に変換され転送される。
WinSCPのデフォルトの設定では、ファイルの拡張子を見て、自動的にASCIIモードに切り替わる。

・バイナリモードの場合
改行コードの変換は行われず、Windows形式のままサーバに転送される。
WinSCPのデフォルトの設定では、ファイルの拡張子を見て、自動的にバイナリモードに切り替わる。


2.サーバー上のファイルをWinSCPから直接編集して保存した場合の動作

デフォルトのエディタで編集した場合は、バイナリモードで転送される。
つまり、改行コードの変換は行われず、Windows形式のままサーバに転送される。
外部エディタを設定している場合、強制的にASCIIモードで転送するよう設定することが可能。


以上の結果から、改行コードをきちんと変換するためのWinSCPの設定は、以下のようになります。

1.[オプション]->[環境設定]->[転送]で「以下のファイルはテキストモード」のところに、必要な拡張子を追加します。

ここに設定されている拡張子のファイルは、テキストファイルとみなされて、自動的にASCIIモードで転送されます。
確実にテキストファイルであることが分かっている拡張子はきちんと追加しておき、確実にASCIIモードで転送されるようにしておきましょう。
参考までに、自分の場合以下の拡張子を追加しました。
*.yml; *.yaml; *.conf; *.pm; *.tt; *.sql; *.t; *.py; *.js; *.json;


2.[オプション]->[環境設定]->[エディタ]画面で必ず外部エディタを登録しておく。
また、「外部エディタでのファイル編集時には強制的にテキスト転送モードにする」にはチェックを入れておく。
なお、追加したエディタは最優先にしておきましょう。

こうすることで、サーバー上のファイルをWinSCPから直接編集して保存する際は、必ずASCIIモードで転送されるようになります。


3.[オプション]->[環境設定]を開き、左の[環境]->[パネル]メニューを選択し、「ダブルクリック時に実行する操作」は「編集」を選択します。


参考にしたURL:
http://www.affrc.go.jp/ja/info/scs/guide/ssh/ascii_mode.html

0 件のコメント:

コメントを投稿