WindowsからLinuxにファイル転送する際の注意点

WindowsからLinuxサーバー上にファイル転送した際に、ちょっと面倒なことが起きたので備忘録。
間違ってたらすみません。

起きたこと

Windowsから以下のようなシェルスクリプトLinuxサーバー上に送ったらファイル名が変なことになった。

・・・
[プログラムの実行] > result.log
・・・

Windows文字コード設定

Windowsでは、一般に文字コードは「Shift_JIS」である。

Linux文字コード設定

Linuxでは、一般に文字コードは「EUC-JP」や「UTF-8」である。

WindowsLinux文字コードの違い

半角の英数字を使う分には、「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

 

・・・改行文字を直接していするにはどうすればいいんだろ?