Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- # Playing with mbsync, I ended up duplicating a few hundred messages when tweaking config
- # This is the fix :)
- use utf8;
- use warnings;
- use strict;
- use Mail::Box::Manager;
- use List::Util qw/sum0/;
- my $mgr = Mail::Box::Manager->new(access => 'rw');
- my $folder = $mgr->open('/path/to/maildir');
- dedup_rec($folder, 0);
- sub dedup_rec {
- my ($folder, $level) = @_;
- my %messages;
- my @messages = $folder->messages;
- for my $subfolder ($folder->listSubFolders) {
- dedup_rec($folder->openSubFolder($subfolder, access => 'rw'), $level+1);
- }
- info($level => "Going to process folder @{[ $folder->name ]}");
- if (scalar @messages <= 1) {
- return;
- }
- for my $msg (@messages) {
- my $subj = $msg->subject;
- my $from = join ', ', map { $_->format } $msg->from;
- my $date = $msg->get('Date');
- if ($messages{$subj . $from . $date}++) {
- $msg->delete;
- }
- }
- my $sum = sum0 map { $_ - 1 } values %messages;
- info($level => "Deduped $sum messages in @{[ $folder->name ]}";
- }
- sub info {
- my ($level, $msg) = @_;
- print "\t" x $level;
- print "$msg\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement