Ho una cartella (tecnicamente in questo caso, un'immagine disco montata in sola lettura) contenente una tonnellata di dati che ho ottenuto eseguendo Data Rescue (un'app di recupero dati) su una delle mie unità server di grandi dimensioni. Ho fatto diversi tipi di scansione e ho scaricato tutti i file in un unico posto. Data Rescue "ricostruisce" i file cancellati e spesso non lo fa abbastanza bene. Può categorizzare in modo errato il tipo di file che è, e può mescolare file separati insieme.
Sto cercando due file PHP specifici (e forse circa altri 5 se ottengo fortuna). La maggior parte di questi file recuperati non ha nomi (0002, 0003 ecc.), Quindi devo cercare per contenuto.
Ho trovato 6 stringhe diverse che dovrebbero essere in grado di identificare questi file specifici. Quindi ho bisogno di un modo per cercare il contenuto dei file, non in una "ricerca magica" di Apple, ma in una vecchia scuola "leggi manualmente tutti i file cercando un abbinamento di stringhe".
grep
suona come la scelta più ovvia, ma non è stato altro che problemi. grep può cercare in modo ricorsivo e può decomprimere gli archivi gzip, zip e bzip, il che è tutto ok. Ma dopo alcuni minuti di esecuzione, inizia a trasmettere errori "troppi file aperti". Non sono sicuro del perché, è come se grep non chiude un file dopo averlo aperto per cercare in esso. Ho anche avuto problemi con grep
che si interrompe ... non si chiude, non si blocca, non si blocca, ma non si usa più CPU, non si legge nulla dal disco, è solo inattivo quando dovrebbe cercare. Ho anche avuto problemi nell'eseguire più% ricerche di% co_de in una sola volta. grep
sembra caricare i file riga per riga, quindi qualcosa come un'immagine del disco carica l'intera cosa nella memoria prima della ricerca. Ma c'è un solo file in questo intero pacchetto che è più grande della quantità di RAM che ho. Quindi, finché eseguo un grep
alla volta, dovrei stare bene.
Questo è il comando che sto usando (racchiuso in uno script che esegue diversi comandi su diversi file di output, con alcuni output di stato):
grep
Questo funzionerà per un po ', quindi si bloccherà. Avrò dei risultati ma non una ricerca completa. Se rimuovo il zfgrep -l -r -a -J -i -s -U -n "#32cd32" /Volumes/\'Storage\'\ Original\ Recovery > 32cd32.txt
, ottengo il flusso di errori di -s
. Quindi, su suggerimento di qualcun altro, utilizzo too many open files
per caricare i file in find
uno alla volta, in questo modo:
grep
Ma quel comando ha esattamente gli stessi problemi.
Quindi questo mi lascia bloccato. Come posso cercare ogni singolo file su questa immagine disco, inclusi gli archivi, per alcune stringhe di testo normale. Inclusi file di dati binari che potrebbero essere stati uniti in modo non corretto con file di testo normale? Questo non sembra un compito arduo per un moderno computer multicore con un sistema operativo attuale, molta RAM e un SSD.
In realtà preferirei una opzione GUI, ma a questo punto prenderò qualsiasi soluzione che funzioni.
Inoltre originariamente ho iniziato a provare a farlo usando BBEdit, ma stava saltando un sacco di tipi di file anche quando gli hai detto di cercare tutti i file. Anche i file basati su XML. Sono rimasto molto sorpreso da questo.