如何将日期和时间放在文件名中?


23

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

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

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

日期时间格式可以是带下划线的任何有意义的内容。如果无法使用AM和PM,则即使是UTC。


如果不是Bash,那么您正在使用什么shell?
瑞安

哦,这是bash ...我的意思是bash脚本*
visc

您不是管道,而是重定向。如果您不重定向,问题将是相同的。正在更新标题。
Mikel

Answers:


46

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

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

这导致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

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

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

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

您可以date通过指定-u标志并在datetime字符串的末尾添加“ Z”来指示时间为UTC,从而在通话中获得UTC时间,如下所示:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@Mikel您和我是否进行过交叉编辑?
瑞安

可能吧 我只是将“ subshel​​l”更改为“命令替换”。我已经完成了,所以请根据需要进行编辑。
Mikel

@Mikel没问题。我现在重新提交了我的编辑。
瑞安

@Mikel不用担心!我应该记得无论如何都将其称为“命令替换”。感谢您改善答案!
瑞安

3
下划线是一个奇怪的字符。最好使用ISO-8601 $(date +%FT%T),它会给出2016-04-25T10:30:00
hschou 2017年
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.