WindowsからLinuxにファイル転送する際の注意点
WindowsからLinuxサーバー上にファイル転送した際に、ちょっと面倒なことが起きたので備忘録。
間違ってたらすみません。
起きたこと
Windowsから以下のようなシェルスクリプトをLinuxサーバー上に送ったらファイル名が変なことになった。
・・・ [プログラムの実行] > result.log ・・・
Windowsの文字コード設定
Windowsでは、一般に文字コードは「Shift_JIS」である。
Linuxの文字コード設定
Linuxでは、一般に文字コードは「EUC-JP」や「UTF-8」である。
WindowsとLinuxの文字コードの違い
半角の英数字を使う分には、「Shift_JIS」であろうが、「EUC-JP」や「UTF-8」であろうが、違いはない。
3つは英数字の文字コードは同じである。
しかし、改行の定義には違いがある。
Windowsでは、改行はCR+LFで定義されている。
CRとは、キャリッジリターン(Carriage Return)のこと。
カーソルを左端の位置に戻すことを意味する。
LFとは、ラインフィード(Line Feed)のこと。
カーソルを新しい行に移動することを意味する。
これに対し、Linuxでは、改行はLFで定義されている。
Linuxでは、CRは表示されない。
もしWindowsのエディタで作成した、上記のコードをLinuxにバイナリー転送した場合、
改行コードは変換されることなく、CRの文字を含んでいる。
そのため、リダイレクトにより作成されるファイルは、result.log+CRとなる。
Linux上では、CRは表示されいため、表示上はresult.logに見える。
しかし、less result.log
を実行しても、ファイルを見つけることはできなくなっている。
CRがファイル名に入ることでの不具合
FFFTPなどによって、result.log
のファイルを操作しようとした際、表示にはファイルが出ている。
しかし、ファイルをダウンロードなどの操作をしようとしてもエラーとなる。
ファイル名からCRを除く方法
以下のコマンドでCRがファイルの最後尾に含まれていても、見つけることができる。
ls result.log*
ファイル名を変更する。
mv result.log* result.log
・・・改行文字を直接していするにはどうすればいいんだろ?