我正在尝试执行命令,并希望将日期和时间放入输出文件名中。
这是我想运行的示例命令。
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 文件,并在原始名称之前添加文件的修改日期和时间。
适应您的需求。