更改文件名中的日期格式

更改文件名中的日期格式

我正在接收电子邮件,文件名格式如下(日期 + 的 Unix 格式.report-server

1509106656.32538_1.report-server

现在我有几封电子邮件。我想用新的日期时间格式格式化所有文件名,如下所示。

dd-mm-yyyy.report-server

答案1

这个怎么样:

for i in *.report-server; do echo mv "$i" "$(date -d@${i%%.*} +%d-%m-%Y.${i##*.})"; done

这将循环遍历.report-server当前目录中的文件,并为每个文件打印一行,例如

mv 1509106656.32538_1.report-server 27-10-2017.report-server

您可以在其中检查文件名。如果它符合您的要求,只需echo从命令中删除并运行它即可执行重命名。

当心!如果您最终拥有多个具有相同日期的文件,mv则(默认情况下)将默默覆盖第一个文件。如果您想保留(可能唯一的).32538_1部分,请在命令中更改${i##*.}为。如果您想在覆盖文件之前询问,请添加选项。${i#*.}mv-i

答案2

您可以使用以下脚本作为提示:

#!/bin/bash
for i in *.report-server; do
    timestamp=$(echo $i | cut -d. -f1)
    output_date=$(date +'%d-%m-%Y' -d @$timestamp)
    mv "$i" "${output_date}.report-server"

答案3

这里有一个使用基于 perl的方法(本质上renameprename如何批量将文件夹名称从一种日期格式转换为另一种日期格式,具有不同的格式说明符):

$ rename -n -- '
  BEGIN{use Time::Piece};
  s/(\d{10})\.\d{5}_1/Time::Piece->strptime($1, "%s")->strftime("%d-%m-%Y")/e
' *.report-server
rename(1509106656.32538_1.report-server, 27-10-2017.report-server)

当您对它正在执行所需的操作感到满意时,请删除-n(或者如果您想要详细输出,则更改为)。-v

相关内容