Ich habe also eine ganz bestimmte Situation, in der ich eine alte E-Mail ausgraben muss, die ich in Time Machine gesichert habe, aber ich kann mich nicht erinnern, wann ich sie erhalten habe. Kann zwischen 6 Monaten und 1 Jahr liegen.
Im Anschluss der Rat hier Im Terminal habe ich folgendes ausgeführt:
find "/Volumes/Time Machine" -name "*.emlx" -exec grep -l "search term" {} \;
Was mich zu mehreren tausend Ergebnissen gefunden hat, die mit "Suchbegriff" (der Betreffzeile) übereinstimmen.
Das Problem ist, dass der Inhalt des Hauptteils dieser Nachrichten alle identisch ist. Es ist der Inhalt des Anhangs, ein PDF-Dokument, nach dem ich nach einem bestimmten Begriff suchen muss.
Haben Sie eine Idee, wie ich ähnlich wie oben suchen kann, aber den Inhalt des PDF-Anhangs durchsuchen kann?
Antworten:
Um die in einer E-Mail eingebetteten PDF-Inhalte mit grep zu durchsuchen, stehen Sie vor mindestens einer, wenn nicht sogar zwei Herausforderungen.
Die erste ist, dass in eine E-Mail eingebettete Dateien nicht in ihrer Rohform erhalten bleiben und stattdessen für die Übertragung in der E-Mail-Nachricht in Klartext codiert werden. Das häufig verwendete MIME-Format ist Base64, dies ist jedoch nicht immer der Fall. Weitere Details zu base64, einschließlich der Codierungs- / Decodierungsmethoden, finden Sie hier: http://en.wikipedia.org/wiki/Base64
Angenommen, der Anhang wurde in base64 codiert, ist es immer noch nicht so einfach, die Suchzeichenfolge in eine Base64-Darstellung zu übernehmen, da die resultierende Codierung davon abhängt, wo in der Eingabezeichenfolge Ihre Zielzeichenfolge angezeigt wird. base64 nimmt alle 6 Bits des Eingabestroms und verwandelt ihn in ein Nur-Text-Zeichen. Wenn das PDF-Dokument eine einfache 8-Bit-Codierung für die Zeichenfolge verwendet, werden aus 3 Zeichen in der PDF-Datei 4 codierte Zeichen. Eine kurze Illustration, wie die Position des Charakters die Dinge verändern kann:
Im ersten Beispiel
123
,456
, und789
einbiegen inMTIz
.NDU2
undNzg5
beziehungsweise. In der zweiten sind die codierten Tupel012
= & gt;MDEy
.345
= & gt;MzQ1
, ... usw.Ihr Suchbegriff könnte am Anfang, in der Mitte oder am Ende eines dieser Tupel beginnen. Wenn Sie nach einer Zeichenfolge suchen, die lang genug ist, können Sie 3 suchbare Zeichenfolgen aus der Mitte herausarbeiten. Jede Zeichenfolge muss ein Vielfaches von 3 Zeichen lang sein. Zum Beispiel, wenn ich nach der Zeichenfolge suchen wollte
123456789
Ich könnte base64 drei mögliche Suchkandidaten kodieren:123456789
,234567
und345678
. Eine der Basiscodierungen sollte in der codierten PDF-Datei angezeigt werden, wenn es sich um eine reine Textzeichenfolge handelt123456789
ist anwesend.Nun kommen wir zum zweiten großen Problem. Dadurch haben wir angenommen, dass der nicht kodierte Inhalt der PDF-Datei in UTF-8 (Nur-Text-Kodierung) vorliegt. Wenn Sie sich den Inhalt einer tatsächlichen PDF-Datei ansehen, werden Sie feststellen, dass sie alle möglichen internen Kodierungen enthält, darunter Schriftzeichen, Text, der in UTF-16 oder UTF-32 kodiert ist usw. Es ist sehr wahrscheinlich, dass Ihre einfache Suchphrase nicht genau so in den PDF-Daten erscheint, wie Sie es erwarten. In der PDF-Datei kann zusätzlicher Inhalt zwischen Zeichen und Wörtern vorhanden sein. Außerdem gibt es Zeilenumbrüche. Wenn Sie also nach einem Satz suchen, der einen Zeilenumbruch durchbricht, ist die Erstellung Ihrer Zielsuchzeichenfolge komplizierter.
Es gibt noch ein paar andere Dinge, die Sie ausprobieren können, damit nicht alles verloren geht.
Wenn Sie den Namen der PDF kennen, können Sie stattdessen danach suchen. Der Dateiname sollte in UTF-8 im MIME-Text der E-Mail-Nachricht erscheinen und kann daher durchsucht werden.
Sie könnten auch Glück haben und anstatt die E-Mails zu durchsuchen, nach PDF-Dateien suchen. OSX Mail extrahiert Anhänge und speichert sie in einem E-Mail-Download-Verzeichnis. Ich verwende Mavericks and Mail v7.3 und meine Anhänge werden in die Unterverzeichnisse unter ~ / Library / Containers / com.apple.mail geschrieben
Übrigens sucht Ihr grep-Befehl nach einer exakten Übereinstimmung. Wenn Sie sich nicht sicher sind, ob Sie Groß- / Kleinschreibung verwenden, sollten Sie die Option '-i' für eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung hinzufügen.
quelle