文件(或目录)名称中的分隔符的良好样式/做法


16

我不确定这是否是在此处发布的“正确”问题。我可能要问的是有关“意见”的更多信息,而不是实际的分类答案(那些有用或无效的答案,仅此而已)。

我想知道什么名称分隔符将同时对Linux友好(或更具体地说,对Bash友好)和对人类友好

假设我要创建一个目录,其中包含与Foo Bar先生相关的内容(Foo是名字,Bar是姓氏)

使用名称“ Foo-Bar/”非常方便。-是一个“常规”字符,不需要转义,它清楚地表明了这一点,Foo并且Bar是两个独立的东西……很好。

现在,“ Foo.Bar”有点棘手。可能有人认为这Foo.Bar实际上是一个文件(乍一看,特别是如果您没有启用着色功能的终端),其中“ Foo”是文件名,“ Bar”是扩展名。

我也可以使用“ Foo Bar”,但是当我要访问目录时,我需要转义空格,如果要列出父目录的内容(Foo Bar位于该位置)并将所述列表放在bash数组中,空白会引起麻烦(很多)。不是很好。

括号()也引起很多问题。还需要将它们转义,然后给命令造成麻烦,例如scp...不好。

所以...问题(最后)是:如果您一眼就想使文件名清晰且有意义,并且需要使用分隔符,那么您将使用什么呢?



我经常使用破折号,但这取决于我在做什么。有些人可能会认为像FooBar这样的驼峰案例是合适的。
klapaucius 2012年

Answers:


14

简短答案:“ Foo _-_ Bar”

长答案:

为了使事情容易发现,我倾向于在需要的地方使用一系列字符,其想法是使用容易发现的东西,这样您就会发现这是分隔符,例如“ _-_”或“ ___”。

我在其中使用的一个实际示例是我的mp3集合,其中文件名包含艺术家和歌曲标题,有时还包含序列号。而且,如果您使用魔术序列将它们分开,那么对眼睛和脚本来说都很容易。mp3示例可能看起来像这样。

  • 01_Blue_Man_Group _-_ Above.mp3
  • 02_Blue_Man_Group _-_ Time_to_Start.mp3
  • 03_Blue_Man_Group _-__ Sing_Along.mp3

现在,如果Foo和Bar是两个不应该混合使用的逻辑事物,则可能是Foo _-_ Bar,这可以转换为您的示例。


2
这样,您还可以区分已经包含破折号的名称(或通常的分隔符)。
lynxlynxlynx

1
reg ex解析也非常好!:^(。+)_-_(。+)\。mp3 $
DanDan

鉴于人们会查看这些文件,所以这是一个很好的答案。本质上,我将其视为分隔符字符串;多字符唯一分隔符。在Vagrant中,我注意到它VAGRANTSLASH在文件名中使用分隔符所在的字符串。
ThorSummoner

9

有这么多的字符,您可能不认为应该是特殊字符,实际上是特殊字符,无论如何,我还是只使用特殊字符。这也使我养成了使用bash补全的良好习惯,它将自动转义文件名中的所有特殊字符。但这也使我养成了良好的习惯,即在脚本中使用Eash转义/引用一切,在bash中使用多部分1-liner。

例如,仅使用一个简单的1-liner:

for file in *.txt; do something.sh "$file"; done

这样,即使其中一个文件具有空格或其他字符,do循环的一部分仍将对它起作用,并且不会错过2个或多个文件名部分,这可能会导致意外的副作用。

由于我无法控制遇到的每个文件的空格/非空格命名,并且如果尝试这样做,它可能会破坏某些符号链接,从而造成更多意想不到的后果,我只希望所有文件名/目录名中都可以有空格,只是引用/转义所有变量以进行补偿。

因此,然后我只在文件名中使用我想要的任何字符(通常为空格)。

我什至在ZFS数据集名称中使用空格,我必须承认,这在为我使用的NAS编写软件的开发人员中引起了很多麻烦。

总结:空格不是无效字符,因此没有理由使用它们。


6

-由于您上面提到的原因,我使用破折号。我避免使用下划线,因为它们需要使用Shift键,因此键入至少要花两倍的时间(而且,我认为它们很丑陋)

我更倾向于对脚本文件名执行此操作-我想清楚地确定脚本的用途对我来说更重要。文档文件只是惰性数据,但是如果滥用脚本,可能会带来危险。


5

我使用下划线(_)。从视觉上看,它们消失了,并且易于键入且不特殊。


4
我发现它们比丑陋-,并且更难键入(必须使用Shift键)
tshepang 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.