【问题标题】:How can I remove duplicates (deduplicate) a mbox format email mailbox?如何删除 mbox 格式电子邮件邮箱的重复项(去重)?
【发布时间】:2012-05-18 08:23:02
【问题描述】:

我有一个 mbox 邮箱,其中包含重复的邮件副本,它们的不同之处仅在于它们的“X-Evolution:”标头。

我想以尽可能快速和简单的方式删除重复的内容。好像这已经写好了,但我没有找到它,虽然我看过 Python 邮箱模块、各种 perl mbox 解析器、formail 等等。

有人有什么建议吗?

【问题讨论】:

    标签: parsing email deduplication mbox


    【解决方案1】:

    我没有详细了解 formail(procmail 的一部分)。它确实有这样一个选项,如以下地方所述:http://hints.macworld.com/comment.php?mode=view&cid=115683http://us.generation-nt.com/answer/deleting-duplicate-mail-messages-help-172481881.html

    【讨论】:

      【解决方案2】:

      这是一个小脚本,我用它:

      #!/bin/bash
      IDCACHE=$(mktemp -p /tmp)
      formail -D $((1024*1024*10)) ${IDCACHE} -s
      rm ${IDCACHE}
      

      邮箱需要通过它进行管道传输,同时会对其进行重复数据删除。

      -D $((1024*1024*10)) 设置了一个 10 MB 的缓存,这是对我一整年的邮件进行重复数据删除所需数量的 10 倍以上。 YMMV,所以相应地调整它。设置得太高会导致一些性能损失,设置太低会导致重复。

      formailprocmail 实用程序包的一部分,mktempcoreutils 的一部分。

      【讨论】:

        【解决方案3】:

        'formail -D' 和 'reformail -D' 每次执行只能处理一封电子邮件。每封邮件在处理前都需要先从 mbox 中分离出来。我使用 maildrop 中的重新邮寄,因为它仍在积极开发中。

        1. 删除旧的 idcache、tmpmail、nmbox
        2. 运行 dedup.sh 。
        3. nmbox 是删除重复消息的输出。

        dedup.sh

        #! /bin/sh
        # $1 = mbox, thunderbird mailbox
        # wmbox.sh is called for each mail.
        
        cat $1 | reformail -s ./wmbox.sh
        

        wmbox.sh

        #! /bin/sh
        # stdin: a email
        # called by dedup.sh
        
        TM=tmpmail
        if [ -f $TM ] ; then
           echo error!
           exit 1
        fi
        cat > $TM
        # mbox format, each mail end with a blank line
        echo "" >> $TM
        
        cat $TM | reformail -D 99999999 idcache
        
        # if this mail isn't a dup (reformail return 1 if message-id is not found)
        if [ $? != 0 ]; then
           # each mail shall have a message-id
           if grep -q -i '^message-id:' $TM; then
              cat tmpmail >> nmbox
           fi
        fi
        
        rm $TM
        

        【讨论】:

          猜你喜欢
          • 2016-08-08
          • 1970-01-01
          • 1970-01-01
          • 2014-05-15
          • 1970-01-01
          • 2015-05-24
          • 1970-01-01
          • 2018-02-11
          • 2015-01-24
          相关资源
          最近更新 更多