Hide & Seek

Mailfolder in der Shell durchsuchen

01.09.2003
Grepmail findet mit einer Hand voll Optionen in Ihren Mail-Ordnern beinahe alles. Neben dem Kommandozeilen-Interface gibt es für die Software auch eine grafische Oberfläche.

Das Rezept, um RPM-Pakete zu bauen, enthielt welche Optionen? Und wie lautete die URL, die sich nun unauffindbar in einem Stapel Nachrichten versteckt? Als Anwender, der mehr als ein paar Mails pro Tag bekommt und nebenbei auch noch Mailing-Listen bezieht, kennen Sie dieses Problem. Mit grepmail haben Sie jedoch ein flexibles Tool zur Hand, mit dem Sie selbst im dicksten Mail-Ordner den Überblick behalten.

Quellen und Installation

Inzwischen dürfte jede der großen Distributionen eine Version des beliebten Suchprogramms an Bord haben. Sollten Sie auf Ihren CDs nichts entdecken, können Sie sich unter [1] ein entsprechendes Paket suchen. Als Alternative steht Ihnen ein Tar-Archiv [2] zur Verfügung.

Die zweite Möglichkeit können wir Neueinsteigern allerdings nicht mit gutem Gewissen empfehlen. Ein Blick in die Datei README, die dem gezipptes Archiv beiliegt, macht schnell klar, warum: grepmail ist ein Perl-Skript und benötigt verschiedene Perl-Module. Diese müssen Sie unter Umständen aus dem Internet ziehen [3] und ohne Distributions-Tools wie YaST installieren. Aus diesem Grunde wollen wir auf die Installation aus dem Tar-Archiv nicht weiter eingehen. Fortgeschrittenen Anwendern legen wir die hervorragend dokumentierte README-Datei ans Herz.

Mehr Interna zum Programm finden Sie auf der Homepage des Projektes [4]. Dort liegen auch Add-Ons bereit, die Sie mit Mailern wie mutt, Gnus oder pine verwenden können.

Bevor wir loslegen, noch ein Hinweis: grepmail arbeitet ausschließlich mit Mbox, dem traditionellen Unix-Format für Mailfolder. Das bedeutet, dass jede Mailbox aus einer Datei besteht. Darin liegen die einzelnen Nachrichten durch eine Leerzeile voneinander getrennt. Die Formate Maildir oder MH hingegen verwenden pro E-Mail eine seperate Textdatei [5] zur Speicherung.

Wenn Sie also mit grepmail experimentieren möchten und bis dato Maildir oder MH verwenden, müssen Sie Ihre Post ins Mbox-Format konvertieren – natürlich nicht, ohne zuvor ein Backup Ihrer Mails zu erstellen.

Als kleiner Trost für die Konvertierungsarie ist das Such-Tool dafür in der Lage, sich durch archivierte und komprimierte Mbox-Dateien zu wühlen.

Abbildung 1: Hilflos vor dem Mailer: Wer soll da was finden?

Suchet, und Ihr werdet finden!

Nehmen wir gleich mit ein Beispiel aus der Zeitgeschichte. Wie oft und in welchen Mail-Ordnern wurde das Wort Steuern erwähnt?

[andreas]~ > grepmail -rb Steuern ~/mail/*
/home/andreas/mail/gerd: 0
[…]
/home/andreas/mail/linux: 0
/home/andreas/mail/linux-debian: 0
/home/andreas/mail/linux-suse: 1
/home/andreas/mail/linux-user: 0
/home/andreas/mail/mbox: 0
/home/andreas/mail/michael: 0
[…]
/home/andreas/mail/zwortwaal: 0

Einmal. Und zwar im Ordner, der zur SuSE-Mailing-Liste gehört. Sehen wir uns die Optionen des Befehls grepmail näher an. Das -r zeigt uns den Fundort und die Häufigkeit des Suchwortes Steuern an. Mit -b beschränkt das Tool seine Suche auf die Textkörper (body) der Nachrichten. Als nächstes nutzen wir den Parameter -h, um nur die Header der Mail in die Suche einzubeziehen. Wir möchten wissen, wie oft der Mailer Gnus verwendet wurde:

[andreas]~ > grepmail -rh "User-Agent: Gnus" ~/mail/* | grep -v " 0$" 
/home/andreas/mail/gerd: 5
/home/andreas/mail/gmx: 1
/home/andreas/mail/linux: 20
/home/andreas/mail/linux-debian: 11
/home/andreas/mail/linux-suse: 5
/home/andreas/mail/mbox: 6
/home/andreas/mail/netzliteratur: 8
/home/andreas/mail/posted: 64
/home/andreas/mail/sent-mail: 333
/home/andreas/mail/sudelbuch: 4
/home/andreas/mail/xtest: 3

Da uns eine Null als Ergebnis nicht interessiert, haben wird die Ausgabe von grepmail in eine Pipe geschrieben. Der Output wird durch den Befehl grep geleitet, der jede Ausgabe mit einer Null unterdrückt. Das Verwenden von Pipes, um Programme miteinander zu verketten, ist eine Stärke der Kommandozeilen-Tools. So erhalten wir mit dem Befehl…

[andreas]~ > grepmail -b "spam" linux-debian | grep "^From: " | sort > liste.txt

…eine alphabetisch geordnete Liste aller Absender des Mailfolders ~/mail/linux-debian, die das Wort spam im Textkörper der Nachricht tragen. Neu am obigen Kommando ist, dass wir statt eines kompletten Pfades zur Mailbox (~/mail/linux-debian) den Ordner selbst (linux-debian) angegeben haben. Grepmail schaut nämlich von sich aus in die Verzeichnisse ~/Mail, ~/mail oder orientiert sich an der Umgebungsvariablen $MAIL.

Abbildung 2: In welchen Mailfoldern steckt die URL?

Um die Mails als Ganzes zu lesen, können Sie die Ausgabe durch einen Pager wie less oder more leiten:

[andreas]~ > grepmail -b -d"between today and 4/15/2003" "spam" sent-mail | less

Auch hier suchen wir wieder nach spam im Text der Nachrichten – diesmal jedoch nur in Mails im Absendezeitraum zwischen heute und dem 15. April 2003. Die Option -d versteht eine Reihe von Zeitdefinitionen. Sie reichen von yesterday über 3 weeks ago bis zum genauen Kalenderformat Monat/Tag/Jahr. Auch ein before, since oder after vor einer Zeitangabe bereitet dem Tool keine Schwierigkeiten.

Nun ist das Lesen von E-Mails mit einem Pager alles andere als angenehm. Beispielsweise zeigt er Umlaute, die quoted-printable kodiert sind, nicht korrekt an. Abhilfe schafft hier das Umleiten der Suchtreffer in eine neue Mbox-Datei:

[andreas]~ > grepmail -mbi yast ~/mail/* > mbox_neu

In diesem Beispiel fahnden wir in allen Mailboxen (~/mail/*) nach dem SuSE-Tool yast. Die Option -i steht für case-insensitive. Das bedeutet: Gleichgültig ob YaST, YAST oder yAst, es wird jede Groß- und Kleinschreibung im Wort akzeptiert. Das -m fügt in die Kopfzeilen jeder Nachricht einen so genannten X-Header ein, der anzeigt, aus welchem Folder die Mail stammt:

X-Mailfolder: /home/andreas/mail/linux-suse

Die Ausgabe lassen wir in die Datei mbox_neu im aktuellen Verzeichnis schreiben. Mutt [6] zeigt dann den Inhalt an (Abbildung 3):

[andreas]~ > mutt -f mbox_neu
Abbildung 3: Die Ausgabe von grepmail mit Mutt

Die Option -v des folgenden Beispiels haben Sie bereits kennen gelernt. Nur betraf sie oben im Text den Befehl grep, um die Nullen von der Ausgabe abzugrenzen. Jetzt kopieren wir alle Mails der Mailbox ~/mail/linux in die Datei mbox_neu – mit Ausnahme von Nachrichten, die durch Microsoft Outlook und Yahoo Groups Message Poster erstellt wurden:

[andreas]~ > grepmail -hv "X-Mailer: (Microsoft Out|Yahoo Groups)" ~/mail/linux > mbox_neu

Auf ähnliche Art und Weise entfernen wir Doubletten, also doppelte Nachrichten, aus einer Mailbox:

[andreas]~ > grepmail -u ~/mail/gmx < mbox_neu

grepmail orientiert sich dank der Option -u an der Eindeutigkeit jeder Message-ID in der Mailbox. Ein Vergleichstest, der die Gesamtzahl der Nachichten im Folder anzeigt, verrät, dass in der Datei mbox_neu eine E-Mail aussortiert wurde:

[andreas]~ > grepmail -r . ~/mail/gmx
/home/andreas/mail/gmx: 7
[andreas]~ > grepmail -r . mbox_neu
mbox_neu: 6

Freilich beherrscht das Programm auch das Hantieren mit Größen. Der Parameter -s gibt die Höchstgrenze in Bytes an:

[andreas]~ > grepmail -ri -Y "^TO:" debian -s 4000 ~/mail/* | grep -v " 0$"
/home/andreas/mail/linux-debian: 20
/home/andreas/mail/sent-mail: 13

Nehmen wie das Kommando Stück für Stück auseinander. Mit den Optionen -r und -i haben Sie bereits Bekanntschaft geschlossen. Der Abschnitt -Y "^TO:" debian ist die Abkürzung des ellenlangen Such-Strings "^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):.*debian", der mit dem Parameter -h ausgeführt wird. Er passt auf so ziemliche jede Zieladresse im Header, die den Namen der Linux-Distribution enthält. Das -s 4000 beschränkt die Suche schließlich auf Nachrichten unter 4000 Bytes.

Damit sind wir schon fast am Ende unserer Experimente mit grepmail. Weitere Optionen und Shortcuts zu regulären Ausdrücken finden Sie mit dem Befehl man grepmail im Handbuch. Zu guter Letzt riskieren wir noch einen Blick auf das Add-On grepm[7] und das Frontend gtkgrepmail.

Abbildung 4: Gtkgrepmail bietet die Suche in den Mails unter einer grafischen Oberfläche an

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Suche in Datenformaten (Teil 2)
    Wer Grep kennt, der findet Alles. Wer obendrein die Spezialvarianten beherrscht, findet das Gesuchte auch an sonst unzugänglichen Orten.
  • Einstieg in einen kommandozeilenbasierten Mail-Reader
    "Warum soll ich mich da einarbeiten und dafür auch noch einen Mail-Server aufsetzen?" fragt sich der Anwender, nachdem er die Liste mit rund 250 Einträgen für die Tastenfunktionen des mutt gesehen hat. Und klickt auf den Link zum Netscape Messenger. Doch der Mail Client mutt lässt sich schon mit einer Hand voll Anweisungen und einigen Einträgen in seiner Konfigurationsdatei ~/.muttrc sinnvoll bedienen, und er entschädigt den Benutzer mit etlichen Features schnell für die spröde, textbasierte Oberfläche: Optionale POP3- und IMAP-Unterstützung, PGP und Threading bietet mutt ebenso wie Makros, Scoring, freie Tastaturbelegung und das Suchen nach Mustern. Selbst Datenbanken, Viewer und Web Browser können problemlos eingebunden werden.
  • Es muss nicht immer Netscape sein
    Kommunikation heißt das zweite Standbein unseres Schwerpunktes in dieser Ausgabe. Wir stellen Ihnen in diesem Artikel drei Mail-Clients vor – zwei als X11-Anwendung, also mit grafischer Oberfläche, und einen konsolenbasierten.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.