Linuxでファイル名に名前を付けるときに特定の特殊文字を使用するのは正しいですか?


18

それはように、特定の特殊文字を使用するために正しいことを+&'.(ドット)と,ファイル名に、基本的には、(カンマ)。

私はあなたが使用できることを理解-し、_何の問題もなく、私は他のシンボルについての明確な何かを見つけることができなかったいくつかの研究を行っています。あなたができると言う人もいれば、できないと言う人もいれば、それらを使用することが「推奨されていない」と言う人もいます(それが何であれ)。


これらのファイルを操作するために使用しているプログラム。一部の文字を特別な方法で解釈するプログラム(引用符で囲まれていない文字列のシェルなど)のみが問題を引き起こします。あなたの平均的なCプログラムは、瞬きすることなくNUL以外のすべてを取ります。
アントン14

9
「正しい」とはどういう意味ですか?
デビッドリチャービー14

ファイル名に特殊文字を使用すると、バグがあるコードがファイル名を誤って処理する可能性が高くなるという問題があります。しかし、あなたがリストしたキャラクターが問題を引き起こす可能性が特に高いとは思わない。空白に関してはさらに問題がありますが、通常は回避する必要があります。そして、特にEOLはすべてのコストで回避する必要があります。

Windowsでは、ファイル名に含めることができるものに対してより厳しい制限があるため、そこでファイルを使用する必要がある場合は、注意が必要です。
evilsoup 14

回答:


28

+、&、 '、などの特定の特殊文字を使用するのは正しいですか?(ドット)および、(コンマ)、基本的に、ファイル名。

はい。

正しいが、必ずしも推奨または便利ではない。

最新のUnixおよびLinuxファイルシステムでは、nullを除く任意の文字を/ファイル名内で使用できます。

ASCII句読点を使用できます。一部のユーティリティは、作成するファイルの名前にストップ(ドット)とコンマを使用します。

ASCII制御文字を使用できますが、これは受け入れられるように表示される可能性が低く、使用が難しいためお勧めできません。

ASCIIアンパサンドやASCIIアポストロフィなどのシェルメタ文字を使用できます。ただし、これは不便であり、コマンドを作成するときには、そのような文字を引用またはエスケープするように特に注意する必要があります。

さまざまなエンコーディングを使用してマルチバイト文字を使用できます。非ASCII文字を正しく解釈して表示するのは、シェルまたはユーティリティ、あるいはその両方です。UTF-8などの一般的なエンコーディングに制限し、ロケールを適切に設定することをお勧めします。

あなたは持っています最少の問題をシェルのメタ文字ではなくハイフンで名前を開始していないものに句読点文字のセットを制限し、ASCII印刷可能な文字を使用して(または停止-あなたがファイルを非表示にする場合を除きます)。


23

他の人が述べたように、現代のUnix / Linuxシステムでは、ファイル名には\0(NUL)と/(スラッシュ)を除く任意の文字を含めることができます。

それに加えて、POSIX標準では、ファイル名に移植可能な文字セットを定義しています。

3.278ポータブルファイル名文字セット

ポータブルファイル名を構成する文字のセット。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

最後の3文字は、それぞれ<ピリオド>、<アンダースコア>、および<ハイフン>文字です。Pathnameも参照してください。

GNU Coreutilspathchkユーティリティは、オプションで呼び出されるとこれをチェックし、オプションは空のファイル名(無効ですが、引数としてに渡される可能性があります)およびハイフン()で始まるファイル名について警告します。-p-Ppathchk-


9

最も安全な方法は、任意のオペレーティングシステムで許可されている文字セットのウィキペディアエントリを参照することです。ここから見つけることができます

たとえば、ほとんどのUNIXベースのシステムでは、許可される文字セットは8ビットセットであり、予約文字はヌル文字(NUL、'\0')です。ただし、ファイル名に特殊文字を使用すると、それらを削除するときに問題が発生するため、使用することはお勧めできません。

たとえば、ファイル名を次のように設定して-ramesh.txt、削除しようとします。

rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.

ファイルを削除する必要があります、

rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y

詳細は、この回答からも見つけることができます。

LinuxとOS-Xでは/、印刷可能なASCIIセットのみが禁止されています。一部の文字(などのシェルメタ文字*?!)はコマンドラインで問題を引き起こし、ファイル名を適切に引用またはエスケープする必要があります。

ext2、ext3などのLinuxファイルシステムは、文字セットに依存しません(多かれ少なかれバイトストリームとして扱うだけです-nullのみで/禁止されています)。これは、UTF-8エンコーディングでファイル名を保存できることを意味します。表示または処理のためにファイル名を適切に変換するためにどのエンコーディングを使用するかを知ることは、シェルまたは他のアプリケーション次第だと思います。

結論として、問題はファイル名に特殊文字を使用することではなく、それらを処理する方法にあります。


そのため(「それらを処理する方法」)、コマンドラインプログラムを使用してファイルを処理する必要があると判断したときに、人生を楽にするために、文字、数字、アンダースコア、ピリオドのみをほぼ排他的に使用します(これは常に少なくとも1回は表示されるようです)。
phyrfox 14

19
で始まるファイル名を提唱するのではなく-、単に正確にするために:1)絶対にこのファイル名を引用符で囲む必要はありません、2)特別な--引数を使用する代わりに、rmそれ自体が示唆するとおりに正確に行うことrm ./-ramesh.txtできます:、それをする必要はありませんあなたが提案するとおり。
ミチャウポリトウスキ14

@MichałPolitowski引用符が不要なだけでなく、引用符の効果もまったくありません。
ctrl-alt-delor 14

4

あなたの研究はほぼ正しいです。ファイル名に特殊文字を使用することは可能ですが、これらの文字には特別な意味があるためお勧めできません。Linuxのファイル命名規則では、「ファイル名はハイフンで始まらない」など、ファイル名に関するその他の制限について説明しています。

ファイル名に特殊文字を使用してコマンドライン操作を実行する簡単な

個人的な注意として、これらのファイルを処理に使用する場合は特別な注意が必要なため、ファイル名に特殊文字を使用することは避けたいです。したがって、開発プロセスから特殊文字を扱う心配を取り除きます。


1
あなたのアドバイスは、ファイル名に-_および.(ドット)のみを使用することですか?
クリスクライン14

@ChrisKlein、うん、ただしファイル名の先頭ではない。
Simply_Me 14

特別な意味は、ファイル名ではなくプログラム(シェルなど)にあります。U&Lのほとんどすべてのプログラムは、ファイル名にNULがない限り、文字をまったく気にしません。
アントン14

@Anthon、はい、リンクに記載されている私のシェル。
Simply_Me 14

2
個人的な注意として、プロジェクトの親フォルダーに「föλde​​r\t☃」のような名前を付けることをお勧めします-壊れたコードやバイナリを公開する代わりに、そのようなファイル名で壊れるバグを作成するとすぐに気付くように他の人が回避する必要があること。「f」で始まる唯一のものである限り、これを使用しても問題はありません。シェルのタブ補完は、入力が難しいものに入ります。
ペティス14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.