Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. # Playing with mbsync, I ended up duplicating a few hundred messages when tweaking config
  3. # This is the fix :)
  4. use utf8;
  5. use warnings;
  6. use strict;
  7. use Mail::Box::Manager;
  8. use List::Util qw/sum0/;
  9.  
  10. my $mgr = Mail::Box::Manager->new(access => 'rw');
  11. my $folder = $mgr->open('/path/to/maildir');
  12. dedup_rec($folder, 0);
  13.  
  14. sub dedup_rec {
  15. my ($folder, $level) = @_;
  16. my %messages;
  17. my @messages = $folder->messages;
  18.  
  19. for my $subfolder ($folder->listSubFolders) {
  20. dedup_rec($folder->openSubFolder($subfolder, access => 'rw'), $level+1);
  21. }
  22.  
  23. info($level => "Going to process folder @{[ $folder->name ]}");
  24.  
  25. if (scalar @messages <= 1) {
  26. return;
  27. }
  28.  
  29. for my $msg (@messages) {
  30. my $subj = $msg->subject;
  31. my $from = join ', ', map { $_->format } $msg->from;
  32. my $date = $msg->get('Date');
  33.  
  34. if ($messages{$subj . $from . $date}++) {
  35. $msg->delete;
  36. }
  37. }
  38.  
  39. my $sum = sum0 map { $_ - 1 } values %messages;
  40. info($level => "Deduped $sum messages in @{[ $folder->name ]}";
  41. }
  42.  
  43. sub info {
  44. my ($level, $msg) = @_;
  45. print "\t" x $level;
  46. print "$msg\n";
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement