Linux / Windows / Unix /…ファイル名:どの文字が許可されますか?エスケープされていないのはどれですか?


43

異なるオペレーティングシステムのコマンドラインで許可される文字とエスケープする必要がある文字はどれですか?


以下に役立つ回答がいくつかありますが、何を達成しようとしていますか?独自のキャラクターホワイトリストルーチンをコーディングすることは、おそらく最適な方法ではありません。
メディナ

みんなありがとう!すべての答えは役に立ちます。 情報が必要なのは、ファイルシステム全体でファイルにタグを付けるツールを作成することです(ファイルの名前を変更します(メタデータなし)。
java.is.for.desktop

スーパーユーザーの回答も参照してください。
ペビック

回答:


27

ファイル名に関するウィキペディアの記事には、ファイル名の文字に関する議論があります。

このエッセイは有益です:Fixing Unix / Linux / POSIX Filenames

この記事では、OS XとWindows XPを比較します:XとXP:ファイル名の禁止文字(PDF、pp約64〜66を参照)。

1,000ドルのAlexのファイル名に含めるべきではないもの

私がしなければならない文字を知らない国連は、エスケープされたが、Linuxには、そのような「N」(改行)、「T」(タブ)などのような特別な意味を持っているかもしれ文字をエスケープするために、おそらく良いアイデアではありませんしかし、それは一般にファイル操作の問題ではありません。おそらく、「エスケープされていない」というより「エスケープされた」という意味でしょう。最も一般的なものは、スペース、「>」、「<」など、シェルが解釈するものです。これらの説明については、リンクした記事を参照してください。


7
これは本当の答えではありません-すべての情報は外部のものです。そして、それらのリンクのいくつかは現在壊れています。
スティーブベネット

26

* nixのファイル名に使用できない文字はNUL、とのみ/です。Windowsでは、のみNUL:\本当に許されますが、多くのアプリケーションでは、さらにも防止することを制限されていない?*+、と%

シェルによって解釈されないために必要な場合を除き、ファイル名の文字をエスケープする必要はありません。


2番目のポイントは強調に値します。通常、「エスケープ」とは、ユーザーがシェルが特別な方法で処理する文字を含む文字列(パス名など)を指定できるシェルメカニズムを指します。OPが「パーセントエンコーディング」などを使用して許可されていない文字をエンコードすることを意味する場合、それは純粋にアプリケーションレベルの「パス名プロトコル」であり、関連する各プログラムが採用する(またはしない)必要があります。
クリスジョンセン

readdirでフォルダーをスキャンしてから、返される名前でファイルを開こうとしています。それらのいくつかは、OSでさえ時々エスケープしなければならないことを示唆するENOENTで開けませんか?
-gman

13

次の文字のいずれかを使用してエクスプローラーでWindows上にファイルを作成すると、その文字が許可されていないというエラーが表示されます。

\ / : * ? " < > |

良いリファレンスはこちらです:

ファイル、パス、名前空間の命名
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoftはさらに次のように述べています。

"... Windowsベースのデスクトッププラットフォームでは、無効なパス文字にはASCII / Unicode文字1〜31、引用符(")、より小さい(<)、より大きい(>)、パイプ(|)、バックスペースが含まれる場合があります(\ b)、null(\ 0)、タブ(\ t)。 "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx


数年前に、ユーザーモードのWindowsには大文字と小文字を区別しない( "ABC.txt" === "abc.txt")という制限があることを思い出しました。ただし、カーネルモードのWindowsには制限が少なく、大文字と小文字が区別されます(* NIXと同様に "ABC.txt"!== "abc.txt")。ただし、すべての意図と目的において、上記の文字はユーザーモードで実行されるため、大半のプログラムに適用されます。
キュービクルソフト

\ / : * ? " < > |それらすべてをエスケープし、GNU / Linuxシステムのmkdirで作成できます。を使用mkdir '?'して?ディレクトリを作成することもできます。これをテストするために、ramdiskとXFSファイルシステムを使用しました。
S.ゴスワミ

5

Linuxおよびその他のPOSIX互換システムでは、「/」はディレクトリ区切り文字として予約されており、「\ 0」(NULL文字)は文字列の終わりを示します。それ以外はすべて許可されます。


1
改行、タブ、制御文字などを避け、ファイル名が有効なUTF-8であることを確認することを強くお勧めします。
フリム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.