人们说您不应该在Unix文件命名中使用空格。是否有充分的理由不在文件名中使用大写字母(即,File_Name.txt
vs file_name.txt
)?还是只是个人喜好?
人们说您不应该在Unix文件命名中使用空格。是否有充分的理由不在文件名中使用大写字母(即,File_Name.txt
vs file_name.txt
)?还是只是个人喜好?
Answers:
人们说您不应在Unix文件命名中留空格。
人们说很多话。有一些工具可能会搞砸,但希望在当前时间点上它们的数量很少,因为空间是大型消费者专有操作系统公司繁殖的病毒,现在已经无法避免。
空格使在命令行等上指定文件名显得笨拙。就是这样 * nix系统上唯一被绝对禁止使用的字符是NUL(不用担心,它不在您的键盘上,也不在任何其他人的键盘上)和/
,因为这是路径分隔符。1 除此之外,其他任何事情都不会发生。单个路径元素(文件名)限制为255 个字节(如果使用扩展字符集,可能会很复杂),并提供4 KiB的完整路径。
还是这只是个人喜好问题
我会说是的。大多数DE的似乎在创造资本目录的转换$HOME
(Downloads
,Desktop
,Documents
-将D
是非常受欢迎的),所以没有什么奇怪的了。还有一些非常常见的带有大写字母的传统文件,例如.Xclients
和.Xauthority
。
一开始将事物大写的价值在于,按字典顺序列出时,它们将排在小写字母之前-至少使用许多工具并受地区限制。
我是骆驼保护套(也称为camelCase)的爱好者,并且将其与文件名一起使用,例如/home/goldilocks/blueSuedeShoes
-不用担心里面有什么。绝对是个人喜好问题,但尚未使我感到悲伤。
Java类文件本质上倾向于包含大写字母,因为Java类名称确实如此。当然,NetworkManager
即使我们中的某些人愿意,也不要忘记。
1. POSIX “ Portable Filename Character Set”建议使用更多分隔符,其中不包含空格-但包含大写字母! POSIX还在同一文档的其他地方指定了有关“斜杠字符和空字节”的更一般的限制。这反映了长期的常规做法,或反映了这种做法。
README
S和Makefile
S和等。
避免在文件名中使用大写的一个原因是,Unix中的排序顺序区分大小写,因此以大写字母开头的文件将显示为乱序。这就是为什么Makefile
通常使用大写字母命名的原因M
-它是您首先要查看的文件之一,而无需滚动/跳过槽a-l
。
也就是说,就文件名而言,您可能做得更糟:
-
可能会导致问题,因为许多程序会将其视为命令行选项而不是文件名(例如,rm -r
不会删除名为的文件-r
)。.
会将其隐藏在许多实用程序和shell globbing中(例如,rm *
不会删除.config
)|<>*?
,甚至是不可打印的字符newline
,但可能会破坏类似于空格字符的脚本/程序。不同之处在于,经常使用空格字符,因此程序员倾向于针对它测试程序,而较少使用的流行字符通常未经测试。rm *
不是要说:不会删除类似文件.config
?
Makefile
并且README
是这种行为的完美示例。还请注意,如果字母不是名称中的第一个字母,则这种影响可以忽略不计,因此,如果您使用camelCase,则影响不大。当然,你可能会惊奇地发现anOctagon
之前angle
,但至少他们会一起上市。
如果要与Windows环境交互,则应避免使用大写字母,因为Windows会小写所有内容。相反,这通常是一个问题。链接Page_2.html
将page_2.html
在Windows中找到,但在Unix中将失败。
NUL
且被/
禁止。
cat > Foo
则会覆盖file foo
。如果您习惯于保留大小写且区分大小写的文件系统(例如ext *),则此行为可能是意外的并且令人困惑。
\0
and /
,区分大小写的八位字节流)。至少那是我记得的方式。但是我同意这有点混乱。有在...进一步的限制
避免使用上限的原因之一是bash
s的制表符区分大小写(至少在默认情况下是区分大小写的)– 每当我使用默认配置结束时,这仍然使我感到困惑bash
。当然,还有其他流行的Shell,但这与bash
许多操作系统上的默认登录Shell 结合在一起,意味着默认值通常区分大小写。使用全小写的文件名在此简化了事情。
echo set completion-ignore-case On >> ~/.inputrc
至少在您自己的系统上可以有所帮助。
Foo
然后再键入cat f
(Tab),它将失败。但是,如果您键入cat foo
,cat Foobar
或cat Fu
-遇到访问名称不正确的文件的麻烦,这实际上与自动完成没有任何关系。
由于NL_Derek打开了这罐蠕虫,但没有正确表达,因此我将这样说:
可以使用大写字母,但应避免创建仅按大小写不同的文件(在同一目录中),例如File_Name.txt
和 file_name.txt
,因为
FILENA~1.TXT
和方式使您访问它们FILENA~2.TXT
-键入dir /x
以查看短名称(如果有)与长名称一起使用。)cmd1 > foo
cmd2 > Foo
cmd2
我确实考虑 最好的方法是避免在文件名中使用大写和空格。
有人会说他们不同意,但这是一个问题或我所说的宗教信仰:很难讨论和达成共识。那些不同意的人说,现在大多数工具都固定为对首都和太空友好:它们是正确的,但这不是问题。
正确的问题是,文件名中需要使用大写和空格。对于这个问题,除了我用Java编程时,答案通常都是无时无刻:我的文件名不需要大写和空格。我用下划线(_
)或减号(-
)代替的所有空格,因此,我不使用驼峰式大小写(亦称camelCase),这与某些其他宗教信仰相反。
许多人称我为胡说八道是因为他们这样做并教导他们-有些人仍然这样做-有些人绊倒了一个对资本/空间不友好的工具,向我说我是对的,他们应该听我的话。 做任何您想做的事情,并且如果您在文件名中使用大写和空格,我希望您永远不会使用写得不好的工具。但是,如果您希望再次使用该工具,将不会很困难,也不会花费您的业务和/或大量金钱和/或时间。但是,如果最终结果不佳,您会记住,过去有人告诉过您,在文件名中使用大写字母和空格是不好的做法。
最后一件事,如果要避免所有问题,则文件名中不应包含特殊字符(仅小写字母,数字,下划线和减号[1])。此有害字符列表还包括所有非ascii字符(是,法语和其他非英语的人-我是其中的一个-都不是à,â,ä,ç,é,...,ö,æ,œ ,...)。这还扩展到许多其他方面,包括login和password。我将让您猜测当您在登录名或密码中加上引号或双引号('
或"
)时会发生什么情况,该登录名或密码由bash脚本处理,而不是由经确认的sysadmin编写。
[1]:也许我们可以扩大,为~
,@
,#
和其他一些人,但这是自找麻烦(是的,我知道emacs的文件...)。