Linux

包含時間戳的文件名的首選格式

  • April 1, 2021

眾所周知,“unix”可以在文件中包含除 ‘/’ 和 ‘\0’ 之外的任何內容,但係統管理員的偏好往往要小得多,這主要是因為沒有人喜歡空格作為輸入……還有一堆東西’:’ 和 ‘@’ 的特殊含義。

最近我看到了另一種在文件名中使用時間戳的情況,在使用不同的格式使其“更好”之後,我想我會嘗試找到一個“最佳實踐”,而不是看到一個我想我只是在這裡問一下,看看人們是怎麼想的。

可能的“常見”解決方案(p=prefix 和 s=suffix):

  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

優點:

  • 這是“常見的”,所以“足夠好”可能比“最好”更好。

  • 沒有奇怪的字元。

  • 很容易將“日期/時間 blob”與其他所有內容區分開來。缺點:

  • 僅日期版本不容易閱讀,包括時間讓我的眼睛流血,秒也只是“哈哈”。

  • 假設 TZ。

  1. 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/焦油/等。不會喜歡那些 ‘:’ 字元。

  • “正常”人需要一點時間才能看到’T’代表的WTF,最後是什麼:)。

  • 很多’-‘字元。

  1. 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/焦油/等。不會喜歡那些 ‘:’ 字元。

  1. 我喜歡連字元:
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。

  1. 我喜歡帶有副檔名的連字元:
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。

…所以任何人都想給出一個偏好和一個理由,或者不止一個(例如,如果 95+% 留在機器本地,則不要關心 TZ,但如果不是,則非常關心)。

或者,顯然,上面列表中沒有的東西。

  1. 應盡可能遵守 ISO 8601 格式,因為它是最接近標準的東西。
  2. “T”不足以成為真正保證擺脫它的絆腳石。
  3. ‘:’ 是潛在的殺手,所以應該避免。
  4. 由於其他人的答案中提到的原因,應該使用 UTC(或“Z”時間)。
  5. ISO 8601 包括使用 UTC(‘Z’ 時間)的格式,應該使用它。
  6. ISO 8601 包含一種不使用“:”字元的格式,應該使用該字元。

所以…範例“最佳”日期時間格式:

  1. 20120317T1748Z
  • 100% 符合 ISO 8601
  • 僅限字母數字字元(對系統管理員非常友好)
  • 不是最快的閱讀,但外行肯定可以閱讀
  1. 2012-03-17T1748Z
  • 日期部分符合 ISO 8601
  • 時間部分符合 ISO 8601
  • 日期和時間之間的轉換符合 ISO 8601
  • 將 ISO 8601“擴展”格式(帶連字元的日期、帶冒號的時間)與 ISO 8601 的“基本”格式(不帶連字元的日期、不帶冒號的時間)混合,這可能不太正確
  • 添加 ‘-’ 字元(與 1 相比)
  • 外行人更容易閱讀(vs 1.)
  1. 2012-03-17–1748Z
  • 日期部分符合 ISO 8601
  • 時間部分符合 ISO 8601
  • 日期和時間之間的轉換不符合 ISO 8601
  • 將 ISO 8601“擴展”格式與 ISO 8601“基本”格式混合
  • 外行人更容易閱讀(對比 1. 和 2.)
  • 沒有新角色(vs 2.)

我偏愛 1. 因為它完全是 IAW 標準,但其他標準很接近。

注意::當然,根據需要添加秒數。…是的,有或沒有秒(甚至幾分鐘)都是 IAW ISO 8601。:)

引用自:https://serverfault.com/questions/292014