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 11/2014: VIDEOS BEARBEITEN

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

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...