ファイルの命名に大文字を使用しないことはベストプラクティスと見なされますか?


28

Unixファイルの命名にはスペースを使用すべきではないと言われています。ファイル名(すなわち、中に大文字を使用しないように良い理由がありますFile_Name.txtfile_name.txt)?それとも個人的な好みの問題ですか?


キャップを使用できますが、標準としては使用しないでください。小文字と_を使用するだけで、file_name.txtが適切です。
シャビールA.

9
大文字のファイル名を使用するUnix系のものがいくつかあります...いくつかの例には、Makefile、INSTALL、CHANGELOG、そしてもちろん由緒あるREADMEが含まれます。
トーマス

PSR-2-Linuxの大多数で実行されているPHPの事実上の命名標準はcamelCaseを使用していますphp-fig.org/psr/psr-2
jdog

回答:


46

人々は、Unixファイルの命名にスペースを入れるべきではないと言う。

人々は多くのことを言います。混乱する可能性のあるツールがいくつかありますが、スペースが巨大な消費者専有OS企業によって増殖し、現在では避けることができないため、現時点ではそれらの数が少ないことを願っています。

スペースを使用すると、コマンドラインなどでファイル名を指定するのが難しくなります。それについてです。* nixシステムでカテゴリ的に禁止されている唯一の文字はNUL(ご心配なく、キーボードや他の人のものではありません)と/、パス区切り文字です。1 それ以外は何でもあります。個々のパス要素(ファイル名)は255 バイトに制限され(拡張文字セットを使用している場合は複雑になる可能性があります)、4 KiBへの完全なパスです。

または、これは単なる個人的な好みの問題ですか

そうだと思います。ほとんどのDEのは、あなたがに大文字のディレクトリのスルーを作成するように見える$HOMEDownloadsDesktopDocuments- Dそれについての奇妙な何もない、非常に人気があります)。など、それらでは大文字、と非常にありふれた伝統的なファイルもあります.Xclientsとは.Xauthority

最初に物事を大文字にすることの価値は、辞書式にリストされた場合、それらは小文字のものよりも前に来ることです-少なくとも、多くのツールでは、ロケールの対象となります。

私はキャメルケース(別名キャメルケース)のファンであり、ファイル名などでそれを使用しています/home/goldilocks/blueSuedeShoes-そこに何があるか気にしないでください。間違いなく個人的な好みの問題ですが、それはまだ私を悲しませます。

Javaクラス名には大文字が含まれているため、Javaクラスファイルには大文字が含まれる傾向があります。そしてもちろん、NetworkManager私たちの一部が好む場合でも、忘れないでください。


1.はるかにPOSIXによって推奨され、区切りがあり、「ポータブルファイル名文字セット」しないスペースが含まれる-しかし、それは含まれない大文字が! POSIX は、同じドキュメント内の他の場所の「スラッシュ文字とヌルバイト」に関するより一般的な制限も指定しています。これは、長年の慣習的な慣行を反映しているか、反映されてます。


5
ミア:「それは事実ですか?」ヴィンセント:「いいえ、そうではありません。聞いただけです。」ミア:「だれがこれを言ったの?」ヴィンセント:「彼ら」。ミア:「彼らはよく話しますよね?」ヴィンセント:「確かにそうです。」
corsiKa

4
「最初に何かを大文字にすることの価値は、辞書式にリストされるとき[…]、他のすべての前に来るということです。」—もちろん、これはほとんどのファイル名が小文字の場合にのみ機能し、キャップを予約する理由を与えます(少なくとも主要なあなたのためのキャップ)READMESとMakefileSのように。
ブラックライトシャイニング

4
多くのキーボードでは、ctrl-spaceまたはctrl- @またはalt-0がNULを入力します。
-dubiousjim

2
@dodgethesteamroller ext *のスラッシュ(より正確には、値が0x2F のバイト)について誤解していると思います。実際、私はそれがファイルシステムにさえ到達するとは思わない。VFSレイヤーは、バッキングストアに関係なくそれを許可しません。
zwol

3
ファイル名とディレクトリ名にスペースを使用しないでください。たとえシステムが技術的にそれを許可していても、悲しみを引き起こすだけです。代わりに、アンダースコア文字「_」を使用します。
SnakeDoc

9

ファイル名の大文字を避ける1つの理由は、Unixでのソート順では大文字と小文字が区別されるため、大文字で始まるファイルは順不同で表示されるためです。それMakefileが通常、大文字を使用して名前が付けられている理由ですM-トラフをスクロール/スキップせずに、最初に見たいファイルの1つですa-l

これは、ファイル名の面ではるかに悪いことができると言いました:

  • スペースを使用すると、ファイル名を適切に引用しない、正しく作成されていないプログラムやスクリプトが破損する場合があります
  • -多くのプログラムがファイル名の代わりにコマンドラインオプションとしてそれを見るので、ファイル名を開始することは問題を引き起こすかもしれrm -rません(例えば、という名前のファイルを削除しません-r)。
  • ファイル名をaで開始する.と、多くのユーティリティやシェルグロビングから隠されます(たとえばrm *、などのファイルは削除されません.config
  • のような特殊文字|<>*?、さらにnewlineは印刷不可能な文字を使用することは技術的には可能ですが、スペース文字に類似したスクリプト/プログラムを壊す可能性があります。違いは、スペース文字が頻繁に使用されるため、プログラマはそれに対してプログラムをテストする傾向がありますが、人気の低い文字は多くの場合テストされないままです。

4
これはもはや真実ではない傾向があり、最近のロケールでのソートは最近では大文字と小文字を区別しない傾向があり、多くのツールとシェルグロビングはファイル名をソートするためのロケールを尊重します。
ステファンシャゼラス

2
と言っていましたか?:rm *などのファイルを削除しません.configか?
ワイルドカード

1
@Wildcardは実際にはありませんが、おそらくあなたの例は私のものより現実的です。私のポイントは、ユーザーが明示的にそのドットを指定しても、ドットで始まるファイル名はグロビングの影響を受けないことを示すことでした。
ドミトリーグリゴリエフ

1
@DmitryGrigoryev、そうではありません。ドットファイルがあるディレクトリでls -ald。?? *を試してください。
ビル・バルト

1
「ファイル名に大文字を使用することを選択した場合、Unixでのソート順は(場合によっては)大文字と小文字を区別するという事実に留意する必要がある」と言う方が適切だと思います。ユーザーはこの動作をしたい、ともMakefile及びREADMEその完璧な例です。また、文字が名前の最初の文字でない場合、この効果は無視できるため、camelCaseを使用する場合は大した問題ではないことに注意してください。確かに、あなたはanOctagon前に見て驚くかもしれませんangleが、少なくとも彼らはリストに一緒にいるでしょう。
G-Manは「Reinstate Monica」と

6

Windows環境とインターフェイスする場合は、Windowsがすべてを小文字にするため、大文字を使用しないでください。多くの場合、これは逆の問題です。へのリンクはWindowsでPage_2.htmlは見つかりますpage_2.htmlが、Unixでは失敗します。


10
それは真実ではない。NTFS、VFAT、およびexFATのは、彼らが意味、すべて大文字と小文字を区別しないが、ケース保存されている無視し、ルックアップの目的のためにケースを、しかし、店舗にもかかわらずケース。OSXのデフォルトのファイルシステムであるHFS +にも同じことが当てはまります。NTFSには、他のすべてのユニックスとまったく同じように機能するPOSIX名前空間もあります。つまり、解釈されないオクテットの非常に長いファイル名のみでNUL/禁止されています。
ヨルグWミットタグ

5
さらに、「大文字と小文字を区別しないが、大文字と小文字を保持する」というのは、「ファイルAとファイルBの名前が大文字と小文字が異なるだけなので、ファイルAを静かに上書きできる」という別の方法です。つまり、* nixシェルを使用してNTFS共有にアクセスしている場合、cat > Foofileが上書きされますfoo。この動作は、ext *などの大文字と小文字を区別し大文字と小文字を区別するファイルシステムに慣れている場合、予期せず混乱する可能性があります。
-dodgethesteamroller

1
@JörgWMittag誤解しない限り、NTFSは大文字と小文字を区別しません。Windows が不可解な方法で機能するというだけです。
クトゥルフ

1
@Cthulhu:私の知る限り、NTFSには、ファイルの名前を作成できる4つの異なる名前空間があります。(ただし、1つのファイルが複数の名前空間で名前を持つことができるかどうかはわかりません。)「DOS」名前空間(8.3、大文字と小文字を区別しない)、「長い」名前空間(大文字と小文字を区別しない、大文字と小文字を保持する、 UTF-16)、「ショートロング」名、つまり大文字と小文字を保持する必要があるが8.3に収まる名前の特別な名前空間、およびPOSIX名前空間(\0and 以外のオクテットのストリーム/、大文字と小文字を区別)。少なくともそれは私がそれを覚えている方法です。しかし、それは一種の混乱であることに同意します。...におけるさらなる制限があります
イェルクWミッターク

1
…カーネル、さらにAPIのさらなる制限(実際には、さまざまな時代のさまざまなAPIがあり、さまざまな制限があります)、DOSおよびFATとの互換性による制限があり、コマンドインタープリターに制限があり、(グラフィカル)シェル、およびエクスプローラーには制限があります。そして、それは確実に決定するために、多くの場合不可能だところ制限から来ています。それはクレイジーです。Explorerを使用してファイル作成したことがありますが、試したツールを使用してファイル開いたり、コピー、移動、名前変更、削除したりすることはできませんでした。これは、基本的には...に滞在
イェルクWミッターク

4

回避キャップに1つの理由は、あるbashのS tabcompletionは、大文字と小文字を区別(少なくともデフォルト) -これではまだ、私は目の前で終わるたびに私をトリップbashデフォルトの設定では。もちろん、他の一般的なシェルもありますが、これbashは多くのOSでデフォルトのログインシェルであるという事実と相まって、デフォルトでは大文字と小文字が区別されることがよくあります。ここでは、すべて小文字のファイル名を使用すると単純化されます。


2
echo set completion-ignore-case On >> ~/.inputrc少なくともあなた自身のシステムでは少し助けになります。
wchargin

1
ファイル名をどのように「つづった」かを忘れない限り、この答えのポイントが何なのか明確ではありません。たとえば、名前付きのファイルを作成し、Foo後でタイプcat f(Tab)を入力すると、失敗します。ただし、を入力しても同じことが起こりますcat foocat Foobarまたはcat Fu、名前を正しく覚えていないファイルにアクセスできないという事実は、オートコンプリートとはまったく関係がありません。
G-Manは「Reinstate Monica」と言います

@ G-ManTouché。それでも、すべて小文字のファイル名を使用すると、覚えておく必要のあるものが1つ少なくなります。
ブラックライトシャイニング

3

NL_Derekはこのワームの缶を開けましたが、適切に表現していなかったので、これを言います。

これは、使用大文字にOKですが、あなたは(同じディレクトリ内)のファイル作成を避ける必要があります異なるのみ場合によって例えば、File_Name.txt および file_name.txtので、

  • 何らかの方法でディレクトリをWindowsシステムで使用できるようにすると、両方のファイルにアクセスできなくなります。おそらく、使用する名前に関係なく、ディレクトリに最初に表示されるものにのみアクセスできます。(除い:それは与える可能性がありますと、それらにアクセスFILENA~1.TXTし、FILENA~2.TXT -タイプdir /xの短い名前が(もしあれば)どのような長い名前で行くかを確認します。)
  • ファイルシステムが実際にWindowsファイルシステム(たとえば、Windowsを実行しているNFSサーバーのexFATまたはNTFSファイルシステムからマウントされている)の場合、2つの名前は(おそらく)共存できません。たとえば、とを実行する と、からの出力を含む単一のファイルになる場合があります。cmd1 > foocmd2 > Foocmd2
  • 同様に、ファイルをWindowsシステムに転送した場合、2つの名前は(おそらく)共存できません。たとえば、2つのファイルを含むアーカイブ(zipなど)を作成し、Windowsシステムで展開した場合、おそらく2番目のファイルが最初のファイルを上書きします。FTPまたは同様のものを使用してWindowsボックスに転送した場合も同じです。

Windowsだけでなく、他のいくつかのOS(VMS、私は思う、CP / M、確かに他のもの...)
トビーSpeight

3

技術的な理由は別として、これには実用的な側面があります。小文字を使用すると、grep -iまたはLocate -iを使用するのが好きでない限り、検索が容易になります。storageNYCDCPrimaryのように大文字と小文字の単語の文字列を使用する必要がある場合、camelCaseでさえ混乱する場合があります。そのため、storage_nyc_dc_primaryのように、小文字に固執し、読みやすくするためにアンダースコアまたはハイフンでそれらをペッパー処理するのが最善であると思います。


snake_caseは目に優しい- 両方storageNycDcPrimaryStorageNycDcPrimaryも読むのがおかしいです。
go2null

1

私は考えるん、最善の方法であるために、大文字の使用を避けるファイル名に、スペースを。

同意しないと言う人もいますが、それは問題であり、私が宗教的信念と呼んでいるものです。議論し同意するのは難しいです。同意しない人は、ほとんどのツールは現在、首都とスペースに優しいように修正されていると言います。それらは正しいですが、これは問題ではありません。

正しい質問は、ファイル名に大文字とスペースをどれだけ使用する必要があるかです。この質問に対して、私がJavaでプログラミングしている場合を除いて、答えはほとんどの場合ですファイル名に大文字とスペースは必要ありません。すべてのスペースをアンダースコア(_)またはマイナス記号(-)に置き換えます。そのため、他の宗教のいくつかに反して、キャメルケース(別名:camelCase)は使用していません。

多くの人々は、それを行うことと教えるために私にでたらめを呼びかけました-一部の人はまだそうしています-一部の人は資本/空間に優しいツールではなく、私が正しいと私に耳を傾けるべきだと言って来ました。 好きなことをしてください。また、ファイル名に大文字とスペースを使用する場合は、誤って記述されたツールに決してつまずかないことを願っています。ただし、このようなツールにつまずくと、うまくいけば修正するのが難しくなく、ビジネスやコストや時間や費用もかかりません。しかし、最終的に悪い影響を与えるようになった場合、ファイル名に大文字とスペースを使用することは悪い習慣であると過去に言ったことを覚えているでしょう。

最後に、すべての問題を回避する場合、ファイル名に特殊文字は使用しません(小文字、数字、アンダースコア、マイナス[1]のみ)。この不要な文字リストには、すべての非ASCII文字(はい、フランス語、およびその他の英語以外の人々-と私はそれらの1人です-なし:à、â、ä、ç、é、...、ö、æ、æ、œ 、...)。これは、loginpasswordを含む他の多くのものにも拡張されます。確認済みのシステム管理者によって記述されていないbashスクリプトによって処理されるログインまたはパスワードに引用符または二重引用符('または")を入力すると、どうなるかを推測できます。

[1]:多分我々はそれを拡張することができ~@#およびいくつかの他、しかし(...はい、私はemacsのファイルについて知っている)、これはトラブルを探しています。


1
最後のことは、パスワードを思い付くユーザーではなく、認証システムによって処理されるべきものです。システムがパスワードで許可される文字のセットを制限する場合、それは悪いシステムです。
ブラックライトシャイニング

さて、パスワードの文字を制限することは議論の対象です:li1、oO0、...好みによっては、コミュニケーションが困難です。パスワードを通信するべきではないと言う人もいますが、WiFiキーは友人が私の場所にいるときに友人に伝える一種のパスワードです
...-jfg956

これは、システムに組み込まれた制限(この例では、Wi-Fi規格、APおよびクライアント実装など)ではなく、一部の文字の使用を避けるためのあなたの意識的な選択です。ランダムに選択された文字列をパスワードとして使用している場合、モノスペースフォントを使用する(または受信者に使用を促す)か、手書きの場合はより特徴的なグリフを使用する(小文字で区別する)ことで読みやすさを向上できますL、大文字のI、数字1、小文字の小文字O、丸い大文字のO、スラッシュまたはドット付きの数字0など)。または、パスフレーズを使用できます。
ブラックライトシャイニング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.