如何在文件名中添加日期和时间?

如何在文件名中添加日期和时间?

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

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

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

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

答案1

如果您想使用当前日期时间作为文件名,您可以使用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。您可以通过在调用的格式部分中使用“%z”来获取符合 ISO 8601 的时区偏移量,date如下所示:

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

您可以在date调用中获取 UTC 时间,方法是指定-u标志并将“Z”添加到日期时间字符串的末尾以指示时间是 UTC,如下所示:

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

答案2

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

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

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

答案3

for file in *.mp4;
do
    dt=$(date -r "$file" "+%Y%m%d-%H%M%S")
    mv "$file" "$dt - $file"
done

此 Bash 脚本获取当前文件夹中的所有 mp4 文件,并在原始名称之前添加文件的修改日期和时间。

适应您的需求。

相关内容