web-dev-qa-db-ja.com

ファイル名にスペース文字を使用しない理由は何ですか?

私の知っている誰かが、ファイル名にスペースを使用しない傾向にある私たちについて、今日、苛立ちを表明しました。 NamingThingsLikeThis.txt-ファイル名のスペースをサポートするほとんどの最新のオペレーティングシステムにもかかわらず。

技術的な理由(適切な)スペースなしでファイル名を表示することは依然として一般的であるということはありますか?もしそうなら、ファイル名のスペースが回避または推奨されないこれらの技術的な理由は何ですか、そしてそれらはどのような状況で関連していますか?

私が考えることができた最も明白な理由、そして通常私がそれを回避する理由は、そのようなファイルを扱うときにコマンドラインで必要とされる余分な引用符です。他に重要な技術的な理由はありますか?

75
Chris W. Rea

ファイル名の空白文字は、コマンドラインの多くのコンテキストやスクリプトで適切にエスケープされるように注意する必要があるので、コマンドの区切り文字のように見えないようにする必要があります。ランニング。

File/dir/what-everがそのようなコンテキストで使用されることはないと確信している場合でも、それらをそこに置かないほうが安全です。

それと、古い習慣はひどく死にます。

66
David Spillett

コマンドラインと古い習慣に関する他の回答に加えて、スペースを含むファイル名を扱うときに特別な注意を必要とする多くのネットワークプロトコルもあります。

(Webサイトから「Product List.pdf」をダウンロードしようとして、「Product」という名前のファイルで終わったことがある場合、相手側のプログラマが知らなかったか、できなかったため、これに噛まれました。 http Content-Dispositionヘッダーの引用ルールを理解しないでください。)

31
Stobor

理由の多くは歴史的なものです。それは彼らが今日意味をなさないという意味ではありません。

移植性の問題

ファイルに名前を付けるときは、他の(ファイル)システムがそのファイル名をどのように扱うかについても考慮する必要があります。ファイル名の文字は、ご使用のシステムでは問題ない場合がありますが、別のシステムでは問題になる場合があります。

したがって、古いシステムからファイルに簡単にアクセスできる可能性が少しでもある限り、safe キャラクター。これには、あなたが残していた古い回復システムへの起動や、最近のWindowsバージョンがまだ何らかの形でMS-DOSに基づいているという恐れが含まれる場合があります。

長さ

ファイルシステムは、ファイルが持つことができる長さを制限する場合があります。これは、MS-DOSが 8.3ファイル名 に制限されていた時代にはさらに深刻でした。したがって、スペースを省くと、より意味のある文字を名前に含めることができます。

他のいくつかのファイルシステムでも、ファイル名の長さに厳しい制限が定義されています。詳細を知りたい人のために、ウィキペディアの ファイルシステム比較に関する記事 に表があります。

予約文字

MS-DOSでは、スペース文字も予約文字として定義されています。これは、スペース文字が FATのパディング に使用されていたためです。さらに、MS-DOSはシェルのエスケープシステムを提供していませんでした。

コマンドラインの解釈

私が知っているほとんどのコマンドラインは パラメータ区切り文字としてのスペース文字 を使用しています。ファイル名を適切にエスケープすることを怠ると、ファイル名の一部が呼び出したいアプリケーションへのパラメータとして解釈される可能性があるため、悲惨な結果を招く可能性があります。

の違いを検討してください

rm foo bar

そして

rm "foo bar"

上にリンクされたWikiPediaの記事は、コマンドを適切にエスケープするために欠落することによって導入された曖昧さを指摘しています:

あいまいさは、最初にファイル名とディレクトリ名に埋め込まれたスペースを禁止することによって(たとえば、アンダースコア '_'で置き換えることによって)、またはコマンドラインインタープリターとこれらのパラメーターを使用するプログラムでサポートされている場合に防ぐことができます。引数。引用文字の間にスペースを埋め込んだ名前で囲むか、スペースの前にエスケープ文字(通常はバックスラッシュ( '\'))を使用します。例えば

Long path/Long program name Parameter one Parameter two ...

あいまいです(「プログラム名」はプログラム名の一部ですか、それとも2つのパラメータですか?);しかしながら

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

およびLong\path/Long\program\name Parameter\one Parameter\two ...

あいまいではありません。

Uniform Resource Locators(URL)

URLを使用してファイルの場所を記述しようとする場合、スペースをエスケープする必要があります。

文字はさまざまな理由で安全でない場合があります。スペース文字は安全ではありません。URLが転記またはタイプセットされるか、ワープロプログラムの処理を受けると、重要なスペースが消えたり、意味のないスペースが導入されたりする可能性があるためです。

出典: RFC1738

したがって、代わりにスペースを%20に置き換える必要があります。これにより、URLのファイル名の部分が読みにくくなるため、そもそもそれを避けることができます。

29
Der Hochstapler

スペースはWeb上のファイル名でエンコードまたは%20に変換されるため、サイトの資産の管理が難しくなる場合があります。

Image 1.pngImage%201.pngがあると混乱します。代わりにImage001.pngを使用する方が簡単です。

これは実際には、コマンドラインのエスケープシーケンスと同じカテゴリに分類されます。

25
user7012

時々、コマンドラインで処理するとき、古いOSを使用するとき、または異なるOSでコンパイルされるプログラムを作成するとき、または...問題があると思われる多くの理由があるときに、スペースが問題を引き起こすことがあります。 file-without-blanks.txtまたはfile_without_blanks.txtのようにファイルを書き込むのは、とても厄介だと感じています。たとえば、下線付きのフォントを処理するときに下線が見えなくなることがあるため、私は薄暗い方を好みます。

しかし、ほとんどの場合、それは古い時代からの習慣の問題です。 pro放棄する理由が十分にあるとは思いません。


追加のメモ、おそらく関連性はありませんが、それでもここに記載します。ファイルにスペースを使用して名前を付ける人は、通常それについてはあまり考えません。ファイル名でそれらを避けるのが良い理由を少しはよく知らない人。
そして、私たちは皆同意できる、「親愛なるサーかマダム、私はあなたにyo.docを通知するためにこの手紙を書いています」という名前のファイルより悪いことは何もありません。

スペースだけでなく、ファイルの長さも考慮に入れられます。私見では、30文字を超えることはできません。内部にスペースがある長いファイル名は、CDやDVDなどを記録するときにも役立ちます。これらは、古いOSで、Winプラットフォームと* nixプラットフォームの間で読み取る必要があります。

5
Rook