『07.テキスト管理表』といった特定の日本語の文字を含んだ
ディレクトリまたはファイルをcp,あるいはrsyncしようとすると、
cannot stat `ファイル名またはディレクトリ名` Not found directory or file.
とエラーになります。
日本語を別の文字に変えた場合はエラーが出ないため、原因の特定が難しくなっております。
このような場合、どのようにすればエラーを出すことなく日本語を含んだファイル操作を行えるのでしょうか?
おそらく、Shift_JIS の取り扱いに関する問題だと思います。
上記ページの「2バイト目が5C等になりうることによる問題」に詳しい話が書いてあり、これに該当する文字に「表」も含まれます。
ただ、cygwin 1.7.1 以降、デフォルトの文字コードが UTF-8 になり、Shift_JIS 固有の問題は無くなっています。手元の cygwin 1.7.7 on XP の環境では、上記のファイル名は問題なく扱えました。
下記のページに、cygwin 1.7 以降での日本語環境に関する解説があります。
円マーク問題として知られているトラブルです。
Windowsのファイル名の実体はシフトJISコードで格納されています。
"07.テキスト管理表" の "表" は、シフトJISコードで 955C です。
ここで、5C はASCIIコードで \ (円マークまたはバックスラッシュ)に当たります。
つまり、ディレクトリ区切り文字と同じ \ なのです。
さらに、95 は ASCII コードに存在しない文字です。
このため cygwin は "07.テキスト管理表" を "07.テキスト管理?\" というディレクトリ(?は判別できない半角1文字)として認識し、ご質問にあるようなエラーになるわけです。
対処策としては、5C を含まない全角文字を使うしかありませんが、これをいちいちチェックするのは大変です。
cygwin でアクセスするファイル/ディレクトリは英数字に限定した方が無難だと思います。
ありがとうございます。
固有の問題だったのですね。
ありがとうございます。
確認したところ、cygwinのバージョンは1.7.1以降でしたが、zshの文字コードがSJISのため問題が起こったのかもしれません。