Nachdem ich 80'000 Emails in meinen Posteingang verschoben hatte, wollte ich in Usermin per Filterregel diese Mails in verschiedene Ordner sortieren.
Das kopieren ging auch relativ flott, allerdings ging das Löschen aus dem Posteingang irgendwie nicht wirklich vorwärts.
Die Mails wurden anscheinend nicht einfach verschoben sondern kopiert weshalb ich mit tausenden von doppelten Mails in meinem Posteingang konfrontiert war.

Das ganze manuell zu säubern war offensichtlich nicht praktikabel weshalb ich mich auf die Suche nach anderen Möglichkeiten machte.

Am Ende habe ich es dann mit Hilfe von 2-3 Befehlen geschaft.
Diese will ich hier nun auflisten falls ich wieder mal in diese Situation komme.

Achtung: das funktioniert nur wenn man physischen Zugriff auf den Mailserver hat und mit Maildir arbeitet!

Als erstes erstelle ich ein Backup des Accounts:

rsync -av --progress /path/to/homes/account/ /path/to/homes/account_backup/

Falls man den Vorgang für verschiedene Ordner wiederholen muss kann man auch noch die option --delete anfügen. Und vielleicht vorher noch einen --dry-run machen.

Dann erstelle ich eine Liste aller Mails im Posteingang:

find /path/to/homes/account/Maildir/{new,cur} -type f -exec grep -m1 -i "^Message-ID:" {} \; -print > /tmp/inbox_msgids.txt

Und nun von dem Ordner in den die Mails bereits kopiert wurden:

find /path/to/homes/account/Maildir/.INBOX.subdir/{new,cur} -type f -exec grep -m1 -i "^Message-ID:" {} \; -print > /tmp/subdir_msgids.txt

Anschliessend vergleiche ich die beiden Dateien und lasse die Email-Dateien in eine weitere Datei schreiben.
Die Emails werden in den Dateien jeweils mit

Message ID: {message-id}
Dateiname

erfasst, weshalb ich die 1. Zeile matche und die 2. Zeile in die neue Datei schreibe.

awk '
NR==FNR { if (NR % 2 == 1) id[$0]; next } 
NR % 2 == 1 && ($0 in id) { getline; print $0 }
' /tmp/subdir_msgids.txt /tmp/inbox_msgids.txt > /tmp/duplicate_files.txt

Nun kann ich alle Dateien in der duplicate_files.txt löschen:

xargs rm -f < /tmp/duplicate_files.txt

Damit waren dann alle Mails im Posteingang gelöscht.

Falls irgendetwas schiefgelaufen ist, kann man mit

rsync -av --progress /path/to/homes/account_backup/ /path/to/homes/account/

einfach alles wieder zurückspielen und nochmal versuchen.