Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 如何删除mbox格式电子邮件邮箱中的重复项(重复数据消除)?_Parsing_Email_Deduplication_Mbox - Fatal编程技术网

Parsing 如何删除mbox格式电子邮件邮箱中的重复项(重复数据消除)?

Parsing 如何删除mbox格式电子邮件邮箱中的重复项(重复数据消除)?,parsing,email,deduplication,mbox,Parsing,Email,Deduplication,Mbox,我有一个mbox邮箱,其中包含重复的消息副本,它们的不同之处仅在于“X-Evolution:”头 我想删除重复的,在尽可能快和简单的方式。这似乎已经编写好了,但我还没有找到它,尽管我已经查看了Python邮箱模块、各种perl mbox解析器、formail等等 有人有什么建议吗?我没有足够详细地查看formail(procmail的一部分)。它有这样一个选项,如:和这是一个小脚本,我用它: #!/bin/bash IDCACHE=$(mktemp -p /tmp) formail -D $((

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

我想删除重复的,在尽可能快和简单的方式。这似乎已经编写好了,但我还没有找到它,尽管我已经查看了Python邮箱模块、各种perl mbox解析器、formail等等


有人有什么建议吗?

我没有足够详细地查看formail(procmail的一部分)。它有这样一个选项,如:和

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

#!/bin/bash
IDCACHE=$(mktemp -p /tmp)
formail -D $((1024*1024*10)) ${IDCACHE} -s
rm ${IDCACHE}
邮箱需要通过管道传输,同时将对其进行重复数据消除

-D$((1024*1024*10))
设置一个10兆字节的缓存,这是我一整年邮件重复数据消除量的10倍多。YMMV,因此相应地调整它。将其设置得太高会导致一些性能损失,将其设置得太低会导致重复出现


formail
procmail
实用程序包的一部分,
mktemp
coreutils
的一部分,“formail-D”和“reformail-D”每次执行只能处理一封电子邮件。每封邮件在处理之前都需要先从mbox中分离出来。我使用来自maildrop的reformail,因为它仍在积极开发中

  • 删除旧的idcache、tmpmail、nmbox
  • 运行dedup.sh
  • nmbox是删除重复消息的输出
  • 重复数据消除.sh

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

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