文件名的首选格式,包括时间戳


16

众所周知,“ unix”在文件中可以包含除“ /”和“ \ 0”以外的任何内容,但是sysadmins的使用偏好通常要小得多,这主要是因为没有人喜欢使用空格作为输入...以及许多东西“:”和“ @”等特殊含义。

最近,我还看到了在文件名中使用时间戳的另一种情况,并且在使用不同的格式进行播放以使其“更好”之后,我发现我会尝试找到“最佳实践”,而没有发现我只想问一下这里,看看人们的想法。

可能的“常见”解决方案(p =前缀和s =后缀):

  1. syslog / logrotate / DNS格式:

    p-%Y%m%d-suffix = prefix-20110719-s
    p-%Y%m%d%H%M-suffix = prefix-201107191732-s
    p-%Y%m%d%H%M%S-suffix = prefix-20110719173216-s
    

    优点:

    • 这是“常见的”,因此“足够好”可能比“最佳”好。
    • 没有奇怪的字符。
    • 容易将“日期/时间斑点”与其他所有内容区分开。

    缺点:

    • 仅日期的版本不容易阅读,包括时间在内使我流血,秒也只是“笑”。
    • 假设TZ。
  2. ISO-8601-格式

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%dT%H:%M%z-s = p-2011-07-19T17:32-0400-s
    p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T17:32:16-0400-s
    p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T23:32:16+0200-s
    

    优点:

    • 没空间了。
    • 考虑到TZ。
    • 被人类阅读“不错”(仅日期对良好)。
    • 可以由$(date --iso = {hours,minutes,seconds})生成

    缺点:

    • scp / tar / etc。不会喜欢那些':'字符。
    • “正常的”人需要花一点时间才能看到“ T”代表的WTF,最后的含义是:)。
    • 很多“-”字符。
  3. rfc-3339格式

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%d %H:%M%:z-s = p-2011-07-19 17:32-04:00-s
    p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 17:32:16-04:00-s
    p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 23:32:16+02:00-s
    

    优点:

    • 考虑到TZ。
    • 可以被“所有人”轻松阅读。
    • 可以区分日期/时间和前缀/后缀。
    • 以上某些内容可以通过$(date --iso = {hours,seconds})生成

    缺点:

    • 时间版本中有空格(这意味着所有代码都会讨厌它)。
    • scp / tar / etc。不会喜欢那些':'字符。
  4. 我喜欢连字符:

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%d-%H-%M-s = p-2011-07-19-17-32-s
    p-%Y-%m-%d-%H-%M-%S-s = p-2011-07-19-23-32-16-s
    

    优点:

    • 基本上是一个稍微好一点的syslog / etc。变体。

    缺点:

    • 很多“-”字符。
    • 假设TZ。
  5. 我喜欢连字符,带有扩展名:

    p.%Y-%m-%d.s = p.2011-07-19.s
    p.%Y-%m-%d.%H-%M.s = p.2011-07-19.17-32.s
    p.%Y-%m-%d.%H-%M-%S.s = p.2011-07-19.23-32-16.s
    

    优点:

    • 基本上是“我喜欢连字符”的变体。
    • 没有奇怪的字符。
    • 可以区分日期/时间和前缀/后缀。

    缺点:

    • 使用“。” 这里有点非传统。
    • 假设TZ。

...所以任何人都想给出偏好和原因,或者是一个以上的原因(例如,不在乎TZ是否保持本地机器为95%以上,但不在乎)。

或者,显然,不在上面的列表中。



您要问的实际问题是什么?
沃德-恢复莫妮卡

我以为我的问题更多是“做XYZ的最佳实践是什么”,而不是“我最喜欢的XYZ是什么”?
詹姆斯·安迪尔

Answers:


19
  1. 应该尽可能遵守ISO 8601格式,因为它是最接近标准的格式。
  2. “ T”不足以成为真正摆脱它的绊脚石。
  3. “:”是潜在的杀手,,因此应避免使用它们。
  4. 由于其他答案中提到的原因,应使用UTC(或“ Z”时间)。
  5. ISO 8601包括使用UTC(“ Z”时间)的格式。
  6. ISO 8601包含不使用':'字符的格式,应该使用。

因此...示例“最佳”日期时间格式:

  1. 20120317T1748Z

    • 100%符合ISO 8601
    • 仅字母数字字符(对系统管理员非常友好)
    • 不是最快的阅读方法,但肯定是外行可读的
  2. 2012-03-17T1748Z

    • 日期部分符合ISO 8601
    • 时间部分符合ISO 8601
    • 日期和时间之间的转换符合ISO 8601
    • 将ISO 8601“扩展”格式(带连字符的日期,带冒号的时间)与ISO 8601“基本”格式(无连字符的日期,无冒号的时间)混合在一起,这可能不太正确
    • 添加'-'字符(与1.)
    • 外行人阅读起来要容易一些(vs 1.)
  3. 2012-03-17--1748Z

    • 日期部分符合ISO 8601
    • 时间部分符合ISO 8601
    • 日期和时间之间的转换不符合ISO 8601
    • 将ISO 8601“扩展”格式与ISO 8601“基本”格式混合
    • 对于外行人来说,阅读起来要容易一些(相对于1和2。)
    • 没有新字符(对比2)。

我很喜欢1.,因为它完全是IAW的标准,但其他标准则很接近。

注意::当然可以添加秒。...而且是的,所有IAW ISO 8601都有或没有几秒钟(甚至几分钟)。


2

我不包括时区,仅使用世界时。如果可能会造成混淆,则可以添加-UTC后缀。如果您指定时区,则可能有人会依赖它。而且在某些情况下,DST更改或DST偏移会在某些处理上造成严重破坏,或者在某些系统上处理会有所不同,因为它们的DST配置不是最新的,这将出现一些奇怪的情况。UTC到处都是一样的。

我确实认为连字符可以使文件名更具可读性,从某种意义上讲,它可以更轻松地识别文件数据的日期时间。如果要包括亚秒精度,则通常为.nnnnn。

我个人不喜欢T。在文件名中使用冒号可能会影响与其他文件系统的互操作性。


-1
  1. 我也不会包括时区。您处理日志的脚本/工具应该知道这一点。另外,关于夏/冬时间的变化-我建议您始终将服务器始终固定为UTC。基本服务器时区和在其上运行的数据库的时区(未更改)之间的突然差异可能会引起头痛;-)。

  2. 关于日志文件命名-我知道,很多人不喜欢它,但是我想保持简单:

p-%s-type.log = p-1311116459-type.log

优点:

  • 公分母
  • 在进一步的脚本编写中非常容易使用

缺点:

  • 不可读

在同事(无论出于何种原因)需要手动检查日志的机器上,我选择了这种方式,每天轮换:

p-%Y-%m-%d-type.log = p-2011-07-20-type.log

最好的祝福

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.