两个点 (..) 或两个破折号 (--) 作为文件和目录名称中的分隔符

and*_*isk 6 filenames

使用双点或双减号作为分隔符是个好主意吗?我正在尝试为实验科学数据找到一个好的命名约定。例如:

2017-12-11T19-45..JDoe-042..UO2(NO3)2-EtOAc_dist..150.3K..1.234mM.dat
2017-12-11T19-45--JDoe-042--UO2(NO3)2-EtOAc_dist--150.3K--1.234mM.dat
Run Code Online (Sandbox Code Playgroud)

我的理由:

  1. 为了确保跨平台的兼容性,唯一合适的字符是_ - .及其组合;
  2. 在我的情况下,它们都不能单独使用
    • _预留给空间;由于区分大小写的化学公式,我不能使用驼峰式命名法。
    • -通常是内部实验室代码的一部分,而且它被用作:时间(修改后的 ISO 8601 符号)和比率的冒号的替代品;
    • . 是一个小数点。
  3. 在它们的组合中,最受欢迎的似乎_-_。但是,这是 3 个字符,而且文件名已经很长(从示例中可以看出),因此如果可能,我想坚持使用两个字符。
  4. 视觉,我觉得这是很难很快告诉之间的区别___,而--VS-.VS..相当区别的我。
  5. 我没有包括逗号,(因为它在评论中得到了正确的建议,这也是一个需要考虑的可行字符),因为我认为很容易将它与单个点混淆,该点.已经主要用于数值与小数点。

根据 SE 网络上的几篇帖子,例如

我会假设这两个--..是完全可以接受的,我想的最终选择..。但是,我不确定,尤其是关于正则表达式或 python 脚本如何处理这些文件和文件夹(我对两者的经验都很少,但我正在学习)。

不考虑专业软件的行为,您会说这些分隔符对于常见的文件系统和脚本语言通常是安全的吗?

B L*_*yer 10

在 Unix/Linux 中,经过仔细审查和猜测的设计决策之一是对您有利的文件系统功能:文件/目录名称中允许使用任何字符,除了NUL \0 (ASCII 000) 和斜杠 /(后者是保留用于文件路径)。

符合 POSIX 标准和/或编写良好的程序和脚本将处理这种宽容,但不幸的是,有无数的例子没有。然而,他们倾向于对一组非常特殊的字符进行吐槽,而这些字符不是点或破折号。(空格和换行符是最麻烦的两个。)事实上,点和破折号的使用非常广泛。常用的工具、语言和正则表达式可以很好地处理它们......

...除了一个很小的例外。(当然,对吗?)我没有看到任何迹象表明您打算这样做,但应该注意:避免在名称开头使用破折号。当然,这是合法的,但是存在太多程序会不正确地处理此类名称,导致它们被解释为命令行选项/标志。例如,如果一个脚本像这样将文件名传递给另一个脚本:some-script --my-dash-first-file ...那么看到类似Unknown option '--my-dash-first-file'.

TL;DR如果您避免使用以破折号开头的名称,那么您提出的方案是安全的。

额外的警告:虽然点本身很常见,特别是为了将文件的基本名称与其“扩展名”(例如foo.txt)分开,但成对的点通常单独出现......它们具有特殊含义:当前的父目录目录 ( ..) 或路径中的前一个目录 ( /foo/bar/../baz)。因此,虽然这不会导致任何技术问题,但名称中的双点有点不合常规,可能会导致一些用户重复使用。