垃圾邮件刺客具有“学习”垃圾邮件的功能。每个用户的邮件文件夹中都有一个 .spam 文件夹,系统将指示他们将所有垃圾邮件移至该文件夹中。 (用户正在使用 IMAP。)我已经设置了一个 cron 作业,将每个帐户的 .spam 文件夹的内容输入到萨学习。
02 02 * * * sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/*/*/.spam/{cur,new}
根据 cron 确认电子邮件,这按预期工作。
我现在希望在成功完成 sa-learn 命令后自动删除 .spam 文件夹的内容。我是否正确地认为我可以将以下内容添加到上述 cron 任务的末尾?
&& rm ~/mail/*/*/.spam/{cur,new}
这看起来正确吗?
注意:正在测试是否可以在多个 cPanel 经销商托管帐户上使用。我没有 shell 访问权限。
更新1在 Celada 的回答和评论如下:
您需要执行此操作的方法是将每条消息自动移动到您控制且 IMAP 服务器不接触的不同目录,然后从该位置处理并删除它。幸运的是,您正在使用 Maildir,它允许这种原子移动。
怎么样
mkdir -p /tmp/sa_tmp
&& mv ~/mail/*/*/.spam/{cur,new} /tmp/sa_tmp
&& sa-learn -p ~/.spamassassin/user_prefs --spam /tmp/sa_tmp
&& rm -rf /tmp/sa_tmp
我故意不使用,mktemp
这样如果目录被遗忘,它将在下次运行时被删除。
更新2xhienne 发表评论后:
不确定移动目录 cur 和 new 是个好主意 => 移动它们的内容。此外,由于您将许多名为 new 和 cur 的目录移动到同一目的地,因此会出现名称冲突。
我不确定如何避免文件名冲突。
最后,移动到 /tmp 可能意味着移动到另一个分区,这会产生额外的 I/O 并可能缺少磁盘空间(/tmp 有时是一个小的独立分区)=> 最好移动到像 ~/ 这样的特殊文件夹mail/.sa-了解最后可以删除
mkdir -p ~/mail/.sa-learn
&& mv ~/mail/*/*/.spam/{cur,new}/* ~/mail/.sa-learn
&& sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/.sa-learn
&& rm -rf ~/mail/.sa-learn
更新3:
new
我认为如果该文件夹不存在,这将不起作用。我收到错误:
mv: cannot stat `/home/username/mail/*/*/.spam/new/*': No such file or directory
似乎没有任何“忽略”开关mv
。有任何想法吗?
答案1
您提出的解决方案很有趣。因为您无法保证在运行期间或sa-learn
运行期间不会添加新邮件(或者删除或更改),因此可能会发生许多令人兴奋和不幸的事情,其中最明显的是您可能会删除邮件而不喂它们。sa-learn
rm
sa-learn
您需要执行此操作的方法是将每条消息自动移动到您控制且 IMAP 服务器不接触的不同目录,然后从该位置处理并删除它。幸运的是,您正在使用 Maildir,它允许这种原子移动。