web-dev-qa-db-ja.com

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

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

-および_を問題なく使用できることを理解しましたが、調査を行ったところ、他の記号について明確なものを見つけることができませんでした。できると言う人もいれば、できないと言う人もいれば、それらを使用することは「推奨されない」と言っている人もいます(それが何であれ)。

19
Chris Klein

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

はい。

正解ですが、必ずしも推奨または便利ではありません。

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

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

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

ASCIIアンパサンドやASCIIアポストロフィなどのShell meta-charactersを使用できます。ただし、これは不便であり、コマンドを作成するときは、そのような文字を引用符で囲むかエスケープするように特別な注意を払う必要があります。

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

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

28
RedGrittyBrick

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

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

.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文字は、それぞれ<period>、<underscore>、および<hyphen>文字です。 パス名 も参照してください。

GNU Coreutilspathchk ユーティリティは、-pオプションを指定して呼び出されたときにこれをチェックし、-Pオプションが警告します空のファイル名(無効ですが、pathchkへの引数として渡すことができます)およびハイフンで始まるファイル名(-)。

23
nyuszika7h

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

たとえば、ほとんどのUNIXベースのシステムでは、許可される文字セットは8ビットセットであり、予約文字は null文字 (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エンコーディングで保存できます。表示または処理のためにファイル名を適切に変換するためにどのエンコーディングを使用するかを知るのは、シェルまたは他のアプリケーションに任されていると思います。

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

9
Ramesh

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

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

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

4
Simply_Me