![批量删除由 POSTFIX 管理的收件箱邮件](https://linux22.com/image/1401735/%E6%89%B9%E9%87%8F%E5%88%A0%E9%99%A4%E7%94%B1%20POSTFIX%20%E7%AE%A1%E7%90%86%E7%9A%84%E6%94%B6%E4%BB%B6%E7%AE%B1%E9%82%AE%E4%BB%B6.png)
几个小时前,客户邮件帐户出现问题,被盗用。结果,他的 postfix 中排队了数十万封垃圾邮件,这导致了几个问题。除了一个“小”问题外,所有问题都已修复,安全性也得到了保障:客户的收件箱中现在有近 10 万封退回的垃圾邮件。显然,我正在寻找一个批量操作并进行一些过滤,因为并非所有邮件都属于垃圾邮件。PF 在 Ubuntu 服务器 v10.x 上运行,带有 maildir。
我在包含相同文件的备份文件夹上尝试了此命令:
grep -l -r 'Undelivered' | xargs rm
但它除了运行之外似乎没有做任何事情。
这是因为所有“邮件”都存储在以下命名的文件中吗:
1395063807.V902Ib2081dM533672.ip.ip.ip:2,
答案1
根据您的 版本grep
,这可能会永远等待,因为您没有将文件(或目录)名称作为参数;grep
当指定 时,使用当前工作目录的行为-r
是一个相当新的功能。因此,如果您的版本较旧,您的调用可能会永远等待 上的输入stdin
。只需将 添加到.
最后一个参数即可grep
避免这种情况。
为了避免文件名问题(在这种情况下不应该是问题),最安全的做法是调用
grep -Zl -r 'Undelivered' . | xargs -0 rm --
这样,grep
输出以零字节('\0'
)分隔的匹配文件名,从而避免文件名中出现空格和类似的问题。 --
告诉rm
不要将以下参数视为选项,即,如果文件名以 开头,-
则不会中断。
要查看此命令是否执行任何操作,您可以将选项添加-v
到rm
,这样您就可以看到它是否确实删除了任何内容(当然是rm
在前面)。--