我有以下 bash 脚本来更新 maildir 文件的 mtimes:
#!/bin/bash
for i in /test/emailfile
do
date=$(sed -n '/Received: from/ { :a; n; /;/ {s/.*; //p;q}; b a }' "$i")
newdate=$(date -d "$date" +'%Y%m%d%H%M.%S')
touch -t "$newdate" "$i"
done
该脚本一直运行良好,具有如下标准标头:
Delivery-date: Sun, 22 Apr 2007 00:15:13 -0600
Received: from an-out-0708.google.com ([209.85.132.243])
by x.xxxx.com with esmtp (Exim 4.63)
(envelope-from <xxxxxx@gmail.com>)
id 1HfVLs-0002Io-RQ
for x@xxxxx.com; Sun, 22 Apr 2007 00:15:13 -0600
交货日期为 2007 年。如果我触摸该文件以使文件日期从今天开始,然后运行我的脚本,则文件日期将恢复为接收日期。
但是,当尝试在具有以下标题的电子邮件上运行我的脚本时:
Delivery-date: Mon, 15 Dec 2008 17:26:37 -0800
Received: from xxxxxx ([130.194.13.165])
by xxxxxxx with esmtp (Exim 4.69)
(envelope-from <xxxxxi@xxxxx.xxx.xx>)
id 1LCOhp-0006fm-2g
for xxxxx@xxxxxx.com; Mon, 15 Dec 2008 17:26:37 -0800
日期显然没有恢复。我看不出标题以任何方式明显不同。我需要重置 mtimes,因为许多邮件客户端使用文件时间显示为收到的时间。我的脚本已经处理了超过 3000 封电子邮件,确保所有客户端在移动服务器和所有具有相同日期的文件后以正确的顺序显示电子邮件,但由于某种原因,它不适用于特定的电子邮件。我是否在脚本中留下了一些明显的东西?
编辑:日期显然是从脚本中恢复的,但是无论脚本将日期设置为什么,依赖 mtimes 的客户端都不会显示此消息。权限相同,布局和文件名格式也相同。以下是来自 ls -la 的帖子
-rw-rw---- 1 username username 11769 Dec 14 21:25 1229318728.H329820P11297.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 3366 Dec 15 17:26 1229390797.H476913P25671.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 1149 Dec 22 05:39 1229953142.H901034P11016.xxxxx.serverxxxxx.com:2,S
-rw-rw---- 1 username username 7557 Dec 23 15:43 1230075791.H700954P8392.xxxxx.serverxxxxx.com:2,S
无法正确显示的文件是倒数第二个。有什么方法可以调试为什么会发生这种情况?