Come posso cercare il contenuto degli allegati di posta elettronica PDF di cui viene eseguito il backup su Time Machine?

0

Quindi ho una situazione abbastanza specifica in cui ho bisogno di estrarre una vecchia email che ho eseguito il backup su Time Machine, ma non riesco a ricordare quando l'ho ricevuta. Potrebbe essere ovunque tra 6 mesi a 1 anno fa.

Dopo il consiglio qui , ho eseguito quanto segue nel terminale:

find "/Volumes/Time Machine" -name "*.emlx" -exec grep -l "search term" {} \;

Che mi ha trovato diverse migliaia di risultati corrispondenti al "termine di ricerca" (la riga dell'oggetto)

Il problema è che i contenuti del corpo di quei messaggi sono tutti identici. È il contenuto dell'allegato, un documento PDF, ho bisogno di cercare un termine specifico per.

Qualche idea su come posso effettuare una ricerca simile a quella sopra, ma cercando il contenuto dell'allegato PDF?

    
posta Jack 13.03.2015 - 11:55
fonte

1 risposta

1

Per cercare nei contenuti PDF incorporati in un'email utilizzando grep, devi affrontare almeno una sfida se non due.

Il primo è che i file incorporati in una e-mail non sono conservati nella loro forma grezza e invece sono codificati in testo normale per la trasmissione nel messaggio e-mail. Il formato MIME comunemente usato è Base64 ma non è sempre il caso. Puoi trovare ulteriori dettagli su base64, compresi i metodi di codifica / decodifica qui: link

Supponendo che l'allegato fosse codificato in base64, non è ancora così semplice come prendere la stringa di ricerca e modificarla in una rappresentazione base64 perché la codifica risultante dipende da dove nella stringa di input viene visualizzata la stringa di destinazione. base64 prende ogni 6 bit del flusso di input e lo trasforma in un carattere di testo semplice. Supponendo che il documento PDF utilizzi una semplice codifica a 8 bit per la stringa, 3 caratteri nel PDF diventeranno 4 caratteri codificati. Una rapida illustrazione di come la posizione dei personaggi può cambiare le cose:

% echo "123456789" | base64
MTIzNDU2Nzg5Cg==
% echo "0123456789" | base64
MDEyMzQ1Njc4OQo=

Nel primo esempio, 123 , 456 e 789 si trasformano rispettivamente in MTIz , NDU2 e Nzg5 . Nel secondo, le tuple codificate sono 012 = > MDEy , 345 = > MzQ1 , ... ecc.

La stringa di ricerca potrebbe iniziare all'inizio, al centro o alla fine di una di queste tuple. Se cerchi una stringa abbastanza lunga da poter ritagliare 3 stringhe di ricerca dal centro che potrebbero essere ricercabili, ognuna deve essere un multiplo di 3 caratteri. Ad esempio, se volessi cercare la stringa 123456789 , potrei codificare in base64 tre possibili candidati alla ricerca: 123456789 , 234567 e 345678 . Una delle codifiche di base dovrebbe apparire nel file PDF codificato se è presente la stringa di testo in chiaro 123456789 .

Ora arriviamo al secondo grosso problema. Attraverso questo abbiamo assunto che il contenuto non codificato del file PDF sia in UTF-8, la codifica in testo semplice. Se guardi il contenuto di un vero file PDF, troverai tutti i tipi di codifiche interne che includono indicatori di caratteri, testo codificato in UTF-16 o UTF-32 e così via. È probabile che la tua frase di ricerca semplice non venga visualizzata nei dati PDF esattamente come ti aspetti. Ci possono essere contenuti extra nel PDF tra caratteri, tra parole e poi ci sono anche interruzioni di riga, quindi se stai cercando una frase che attraversa un'interruzione di riga, più complicazioni nella costruzione della stringa di ricerca target.

Ci sono un paio di altre cose che potresti provare, quindi non tutto è perduto.

Se conosci il nome del PDF, puoi invece cercarlo. Il nome del file dovrebbe apparire nel testo MIME del messaggio e-mail in UTF-8 e quindi è ricercabile.

Potresti anche essere fortunato e invece di cercare le email, cerca i file PDF. La posta OSX estrae gli allegati e li memorizza in una directory di download della posta. Sto eseguendo Mavericks e Mail v7.3 e i miei allegati vengono scritti in sottodirectory sotto ~ / Library / Containers / com.apple.mail

A proposito, il comando grep sta cercando una corrispondenza esatta, quindi se non sei sicuro dell'uso del maiuscolo / minuscolo dovresti aggiungere l'opzione '-i' per una ricerca senza distinzione tra maiuscole e minuscole.

    
risposta data 13.03.2015 - 16:26
fonte

Leggi altre domande sui tag