Bash 更改日期已修改为匹配“;标题发送日期“;在电子邮件文件中

Bash 更改日期已修改为匹配“;标题发送日期“;在电子邮件文件中,bash,email,date,cpanel,datemodified,Bash,Email,Date,Cpanel,Datemodified,我用imap把一堆电子邮件移到了服务器上。当他们加载到服务器上时,修改的日期与所有电子邮件的日期相同。因此,当我在mac mail中使用imap时,它会显示9月30日收到的所有电子邮件 电子邮件的标题包含正确的日期,因此roundcube显示正确的日期,因为我认为它从标题中提取信息 Mac mail和其他邮件程序从创建、修改和/或访问的日期提取信息。(我不知道是哪一个,所以我把它们都改了) 我可以手动更改修改、创建和访问的日期,以匹配邮件头的发送日期,但对于2000封电子邮件来说,这需要做很多工

我用imap把一堆电子邮件移到了服务器上。当他们加载到服务器上时,修改的日期与所有电子邮件的日期相同。因此,当我在mac mail中使用imap时,它会显示9月30日收到的所有电子邮件

电子邮件的标题包含正确的日期,因此roundcube显示正确的日期,因为我认为它从标题中提取信息

Mac mail和其他邮件程序从创建、修改和/或访问的日期提取信息。(我不知道是哪一个,所以我把它们都改了)

我可以手动更改修改、创建和访问的日期,以匹配邮件头的发送日期,但对于2000封电子邮件来说,这需要做很多工作

你知道有什么方法可以批量更改修改和创建的日期,使它们与每个电子邮件文件中的标题日期匹配吗

无论如何要通过cron来完成吗

我可以在Ubuntu中使用bash,也可以使用windows,两者都可以

文件中的标题如下所示:

Return-Path: <jane@example.com>
From: <jane@example.com>
To: <joe@example.com>
Cc: "Mike" <mike@example.com>
Subject: Example Subject
Date: Mon, 29 Sep 2014 10:23:34 -0400
Message-ID: <763765530.23306569.1412000614673.JavaMail.root@example.net>
MIME-Version: 1.0
返回路径:
发件人:
致:
抄送:“迈克”
主题:示例主题
日期:2014年9月29日星期一10:23:34-0400
消息ID:
MIME版本:1.0
日期行本身:


日期:2014年9月29日星期一10:23:34-0400

首先,
cd
到文件所在的目录。然后运行:

for f in *
do
    touch -d "$(sed -n 's/^Date://p' "$f" | head -n1)" "$f"
done
上面使用
sed
从文件中提取“日期:”信息,然后使用
touch
将该日期指定给文件


这是使用GNU工具测试的。Mac OSX工具有时会有所不同。

事实上,它在一些文件上不断地说:触摸:无效日期格式`2013年2月4日星期一15:48:19-0400\n 2013年2月4日星期一下午1:47\n 2013年2月4日星期一下午1:47
主题:Matt';s电子邮件
发送至:='@user862,这意味着该文件有多个“日期:”头。为了解决这个问题,我更新了答案,只选择了第一个。好的,谢谢,我会用新参数再试一次。我想它在一些电子邮件中有多个日期字段,并试图使用q。我看到您使用的是-n1。你能解释一下吗?
是管道符号。它将
sed
命令的stdout连接到
head
命令的
stdin
head
是一件值得了解的好事情。它是unix的核心实用程序之一。它打印文件的开头。选项
-n1
告诉它只打印第一行。有一个相应的实用程序,
tail
,用于打印文件的结尾。(使用
q
sed
的解决方案也是可能的。)