ここに投稿するのが「正しい」質問であるかどうかは正確にはわかりません。私はおそらく「意見」について、実際のカテゴリーの答え(機能するか機能しないかのどちらかであり、それだけです)よりも質問しているでしょう。
linuxフレンドリー(またはより具体的にはBashフレンドリー)および人間に優しいと同時に。
Mrに関連する何かを含むディレクトリを作成したいとしましょう。 Foo Bar(Fooは名、Barは姓)
「Foo-Bar/
"は非常に便利です。-
は「通常の」文字であり、エスケープする必要はありません。Foo
とBar
が2つの別個のものであることを明確に示しています...いいですね。
さて、「Foo.Bar
"は少しトリッキーです。誰かがFoo.Bar
は実際にはファイルです(一見すると、特にカラーリングが有効になっている端末がない場合)。ここで、「Foo
」はファイル名、「Bar
」は拡張子です。
「Foo Bar
"ですが、ディレクトリにアクセスする場合や、親ディレクトリのコンテンツをリストする場合は、空白をエスケープする必要があります(ここでFoo Bar
が配置されています)、そのリストをbash配列に入れます。空白が原因で問題が発生します(多く)。よくない。
ブラケット()
も多くの問題を引き起こします。それらはまたエスケープする必要があり、次にscp
...などのコマンドで問題を引き起こす可能性があります。
だから...(ついに)質問は、一目でファイルの名前を明確かつ意味のあるものにする必要があり、セパレータを使用する必要がある場合、何を使用しますか?
短い答え:「Foo _-_ Bar」
長い答え:
物事を見つけやすくするために、これが必要な領域で一連の文字を使用する傾向があります。これは、簡単に見つけられるものを使用して、これが「_-_」や「 ___ "。
これを使用する実用的な例は、ファイル名にアーティストと曲のタイトル、およびシーケンス番号が含まれるmp3コレクションです。また、マジックシーケンスを使用してそれらを分離する場合、目とスクリプトの両方で簡単です。 mp3の例は次のようになります。
これは、FooとBarが混合してはならない2つの論理的なものであり、それがFoo _-_ Barである場合、例に変換できます。
特別だとは思えないほど多くの文字があるので、実際には特別なので、特殊文字をとにかく使用します。これはまた、bash補完を使用する良い習慣に私を置きます、そこで、それはファイル名のすべての特殊文字を自動的にエスケープします。しかし、それによって、スクリプトではすべてをエスケープ/引用し、bashではマルチパートの1ライナーを使用するという良い習慣が身に付きます。
たとえば、単純な1ライナーの場合:
for file in *.txt; do something.sh "$file"; done
こうすることで、ファイルの1つにスペースやその他の文字が含まれている場合でも、ループのdo
部分は引き続きそのファイルに作用し、2つ以上のファイル名部分を逃さないため、おそらく意図しない副作用。
遭遇するすべてのファイルのスペース/スペース以外の名前を制御できないため、試した場合、どこかでシンボリックリンクが壊れ、さらに予期しない結果が発生する可能性があるため、すべてのファイル名/ディレクトリ名にスペースが含まれている可能性があります。すべての変数を引用/エスケープして補正します。
そのため、ファイル名には好きな文字(多くの場合スペース)を使用します。
私はZFSデータセット名にスペースを使用しています。これは、私が使用するNASのソフトウェアを開発する開発者の間でかなりのひっかき傷を引き起こしたことを認めなければなりません。
まとめ:スペースは無効文字ではないため、スペースを使用する理由notはありません。
ダッシュを使用します-
、上記の理由から。アンダースコアはシフトキーを使用する必要があるため、アンダースコアは使用しないので、入力には少なくとも2倍の時間がかかります(また、醜いと思います)。
私は何よりもスクリプトのファイル名に対してこれを行う傾向があります。私は、スクリプトの目的を明確に識別することが私にとってより重要だと思います。ドキュメントファイルは単なる不活性なデータですが、スクリプトは悪用されると潜在的に危険です。
アンダースコア(_
)。視覚的には消え、タイプしやすく、特別ではありません。