web-dev-qa-db-ja.com

UnixおよびWindowsファイルシステムで違法となる一般的な文字はどれですか?

こんにちはファイル名とディレクトリ名で許可されていないUnixおよびWindowsファイルシステムの文字を探しています。そのような文字があるかどうか疑問に思っていました(*と%が許可されていることに気付きました)?

7
Yazz.com

「Unix」ファイルシステムのようなものはありません。 「ウィンドウズ」ファイルシステムもそれに来ません。 NTFS、FAT16、FAT32、ext2、ext3、ext4などを意味しますか?名前の有効な文字にはそれぞれ独自の制限があります。

また、質問のタイトルと質問は2つのまったく異なる概念を参照していますか?有効な文字のサブセットについて知りたいですか、それとも両方のシステムで使用できるワイルドカード文字を知りたいですか?

http://en.wikipedia.org/wiki/Ext は、「NULLと '/'を除くすべてのバイト」がファイル名で許可されていることを示しています。

http://msdn.Microsoft.com/en-us/library/aa365247(VS.85).aspx は、「ファイルシステムに関係なく」有効なファイル名の一般的なケースを説明しています。特に、次の文字は予約されています<>: "/\|?*

Windowsでは、ファイルにデバイス名を使用しないことにも制限を設けています:CON、PRN、AUX、NUL、COM1、COM2、COM3など。

WindowsおよびUnixベースのオペレーティングシステムのほとんどのコマンドは、ワイルドカードとして*を受け入れます。 Windowsは%を単一文字のワイルドカードとして受け入れますが、UNIXシステムのシェルは?単一文字のワイルドカードとして。

11
Steve Folly

ほとんどのファイルシステムはかなり許容されます。たとえば、すべてのNTFS、extN、btrfs、XFSおよびReiserFSは、1)nullバイトと2)スラッシュを除くすべてを許可します_/_。

オペレーティングシステムには独自の制限がある場合があります。特に、Win32 API Disallows _* ?_ワイルドカード、_\ /_パスセパレーター、_:_ストリームセパレーター、_< > | "_正当な理由なし1。 ASCII制御文字(0x00-0x1F範囲))も許可されません。


Unixでは、ワイルドカードの展開はシェルとglob()関数によって行われます。 Windowsでは、ファイルシステムドライバーの役割です。そのため、ファイル名に_*_および_?_を使用できません。


Windowsが提供するPOSIXおよびOS/2 APIに関する情報はありません。

1 それらはareコマンドラインシェル(_cmd.exe_)で特別ですが、Unixシェルのようにエスケープを確実に処理できます(実際に処理します)。

4
user1686

それは実際にはファイルシステムに依存しますが、ほとんどのUnixファイルシステムはNULLと/以外のバイトを許可します。 NTFSは、NULLと\ /:* *を除くすべてを許可します。 "<> |。

ウィキペディアには非常に役立つ比較チャートがあります: http://en.wikipedia.org/wiki/Comparison_of_file_systems

つまり、ほとんどすべてのシェルは、エスケープされた場合にのみ、*を最初にワイルドカードとして、ファイル名の文字として認識します。なぜuse *を使用しないのですか?

2
Cakemox

*はどちらでもワイルドカードとして機能するはずですが、これらを展開するのはファイルシステム自体ではなく、シェルまたは呼び出されたコマンドです。たとえば、Bashは*をスペースで区切られた現在のフォルダー内のファイルのリストに展開します。

私はどちらのファイルシステムも文字を明示的に禁止しているとは思いません。 ext2またはNTFSで*&(のような名前のファイル名を作成することは十分に可能です。 Windows GUIでは許可されない場合がありますが、基礎となるファイルシステムで許可されているため、Cygwinで実行できます。

2
SmallClanger