如何在文件名中输入日期和时间?

vis*_*isc 40 text-processing date filenames

我正在尝试执行命令并希望将日期和时间放在输出文件名中。

这是我想运行的示例命令。

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

日期时间格式可以是任何带有下划线的合理格式。如果不能使用 AM 和 PM,即使是 UTC。

Rya*_*yan 81

如果要使用当前日期时间作为文件名,可以使用date命令替换

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"
Run Code Online (Sandbox Code Playgroud)

这会导致文件2016_04_25_10_30_AM.log(尽管使用当前日期时间)使用 md5 哈希/etc/mtab作为其内容创建。

请注意,包含 12 小时格式时间戳的文件名可能不会按照您希望它们的排序方式按名称排序。您可以通过使用 24 小时格式的时间戳来避免此问题。

如果您不需要使用该特定日期格式,则可以考虑使用符合 ISO 8601 的日期时间格式。如何生成有效的 ISO 8601 日期时间表示的一些示例包括:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030
Run Code Online (Sandbox Code Playgroud)

如果您想要“更安全”的文件名(例如,为了与 Windows 兼容),您可以省略时间部分的冒号。

请记住,以上示例均假设本地系统时间。如果您需要跨时区一致的时间表示,则应指定时区偏移或 UTC。您可以通过在date呼叫的格式部分使用“%z”来获得符合 ISO 8601 的时区偏移,如下所示:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400
Run Code Online (Sandbox Code Playgroud)

您可以date通过指定-u标志并在日期时间字符串的末尾添加“Z”以指示时间是 UTC来获取 UTC 时间,如下所示:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Run Code Online (Sandbox Code Playgroud)

  • 下划线是一个奇怪的字符。最好使用 ISO-8601,如 `$(date +%FT%T)`,它将给出 `2016-04-25T10:30:00`。 (3认同)

Exp*_*tor 5

只需添加将所选日期字符串插入路径/文件名中间所需的(复杂)语法的说明。由于这可与任何命令一起使用,因此我展示了如何将文件复制到新位置,并在文件名中添加时间戳:

cp filename.txt /path/to/copyfile/$(date +"%FT%H%M")-newfilename.txt
Run Code Online (Sandbox Code Playgroud)

请注意,尽管 date +"%F 中存在空格,但 newfilename 表达式周围的引号不是必需的。事实上,由于 shell 解析方式,如果包含在 crontab 行中,则包含此类引号会阻止该命令工作作品。