我不确定这是否是在这里发布的“正确”问题。我可能更多地询问“意见”,而不是实际的明确答案(那些有效或无效的答案,仅此而已)。
我想知道什么名称分隔符最多Linux 友好(或者更具体地说,对 Bash 友好) 和人类友好的同时。
假设我想创建一个包含以下内容的目录符先生(富作为名字,酒吧是姓氏)
有了“ ”这个名字Foo-Bar/
就很方便了。-
是一个“常规”字符,不需要转义,它清楚地表明Foo
和Bar
是两个独立的东西......很好。
现在,“ Foo.Bar
”有点棘手。有人可能认为这Foo.Bar
实际上是一个文件(乍一看,特别是如果您没有启用着色的终端),其中“ Foo
”是文件名,“ Bar
”是扩展名。
我也可以使用“ Foo Bar
”,但是当我想访问目录时,我需要转义空格,并且如果我想列出父目录的内容(Foo Bar
位于何处)并将所述列表放入 bash 数组中,则空白会引起(很多)麻烦。不太好。
括号()
也会引起很多问题。它们还需要被转义,然后给命令带来麻烦,因为scp
……不太好。
所以...问题(最后)是:如果您需要使文件名乍一看清晰且有意义,并且需要使用分隔符,那么您会使用什么?
答案1
简短回答:“Foo_-_Bar”
长答案:
为了使事情易于发现,我倾向于在需要的区域使用一系列字符,其想法是使用易于发现的东西,这样你就知道这是分隔符,可能类似于“_-_”或“ ___”。
我使用它的一个实际例子是我的 mp3 收藏,其中文件名包含艺术家和歌曲标题,有时还包含序列号。如果你使用一个神奇的序列来分开它们,那么对于眼睛和脚本来说都很容易。 mp3 示例可能如下所示。
- 01_Blue_Man_Group__-_以上.mp3
- 02_Blue_Man_Group__-_Time_to_Start.mp3
- 03_Blue_Man_Group__-_Sing_Along.mp3
现在,如果 Foo 和 Bar 是两个不应该混合的逻辑事物,那么这可以转换为您的示例,并且可以是 Foo__Bar。
答案2
有这么多你可能认为不应该特别的字符,事实上很特别,我只是使用特殊字符。这也让我养成了使用 bash 补全的好习惯,它会自动转义文件名中的所有特殊字符。但这也让我养成了转义/引用脚本中的所有内容和 bash 中的多部分 1-liners 的好习惯。
例如,在一个简单的单行代码中:
for file in *.txt; do something.sh "$file"; done
这样,即使其中一个文件有空格或其他字符,do
循环部分仍会对其起作用,并且不会错过 2 个或更多文件名部分,从而可能导致意外的副作用。
由于我无法控制我遇到的每个文件的空格/非空格命名,并且如果我尝试,它可能会在某个地方破坏一些符号链接,从而导致更多意想不到的后果,我只是希望所有文件名/目录名中都可以有空格,并只需引用/转义所有变量即可进行补偿。
所以,然后我就在文件名中使用我想要的任何字符(通常是空格)。
我什至在 ZFS 数据集名称中使用空格,我不得不承认,这让为我使用的 NAS 编写软件的开发人员感到相当头疼。
总结:空间不是无效的性格,所以没有理由不是使用它们。
答案3
我使用下划线(_
)。从视觉上看,它们消失了,而且很容易打字,而且并不特别。
答案4
-
由于您上面提到的原因,我使用破折号。我避免使用下划线,因为它们需要使用shift键,所以至少要花两倍的时间来输入(而且,我认为它们很丑)
与其他任何事情相比,我更倾向于对脚本文件名执行此操作 - 我想清楚地识别脚本的用途对我来说更重要。文档文件只是惰性数据,但脚本如果滥用则可能存在危险。