需要在 Linux 中删除某个日期范围内的邮件

需要在 Linux 中删除某个日期范围内的邮件

由于 cron 作业,我在 Linux 服务器中生成了 100 万封邮件。我想删除邮件,但不是全部,因为此 cron 邮件对于排除故障并找出 cron 作业执行的问题很有用。所以我需要保留一个月的邮件并删除剩余的。

答案1

有许多不同的mail命令具有不同的命令集。 POSIX 标准化了mailx命令。

您的邮箱通常会按照收到的顺序包含电子邮件。因此,要删除较旧的邮件,您通常会删除编号较小的电子邮件。您可以使用类似命令删除一系列消息d 1-42(删除前 42 条消息)。

如果你想要更多的控制,我建议穆特,一个命令行电子邮件客户端,为您提供比命令更多的控制mail。 Mutt 有一个文本模式界面,也可以编写脚本。在 Mutt 中,您可以使用命令 D将邮件标记为删除并输入图案 ~d ->1m选择 1 个月以上的邮件。如果您对要删除的邮件列表感到满意,请键入x删除标记为删除的邮件。

答案2

经过大量搜索后我发现档案邮件使用它能够清除旧邮件。

语法是:

archivemail -d 30 --delete <path-to-mailbox>

(一般情况下$MAIL定义本地邮箱位置,尝试echo $MAIL检查)。

您还可以使用-n(--试运行) 选项。

答案3

一段时间以来,我一直在努力解决同样的问题,对于我正在管理的邮件服务器来说,谷歌搜索一个简单的答案比预期的要困难。

我需要从单个用户的邮箱中删除邮件,该邮箱经常填满文件系统,并最终执行以下 cron 作业:

18 5 * * * /usr/bin/mutt -f /var/spool/mail/developer -e "push D~d>7d<enter>qy<enter>"

或者:每天 05:18,在文件(本例中为目录)/var/spool/mail/developer 上运行 mutt,等到 mutt 启动(推送),标记为删除 (D) 模式匹配 (~) 日期 ( d) 超过 7 天 (>7d),结束该命令,然后退出 (q) 并确认删除 (y)

答案4

mutt可以使用正则表达式删除,详情这里这里

相关内容