Come posso cercare 360.000 file, circa 280 GB?

2

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.

    
posta l008com 06.06.2018 - 13:22
fonte

1 risposta

1

L'utilizzo di find ... -exec grep -r attraversa efficacemente l'intera directory più volte (una volta come parte di find , una volta come parte di ogni grep -r ) che può portare agli errori che vedi. Pertanto, dovresti eliminare il find o il -r . Poiché utilizzi la parte grep per identificare i file da raccogliere, probabilmente è il -r nel tuo caso.

    
risposta data 30.06.2018 - 11:41
fonte

Leggi altre domande sui tag