Sto cercando di trovare un modo per analizzare il mio intero sistema Linux per tutti i file che contengono una specifica stringa di testo. Solo per chiarire, sto cercando il testo all'interno del file, non nel nome del file.
Quando stavo cercando come fare questo, mi sono imbattuto in questa soluzione due volte:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Tuttavia, non funziona. Sembra visualizzare ogni singolo file nel sistema.
Questo è vicino al modo corretto di farlo? Se no, come dovrei fare? Questa capacità di trovare stringhe di testo nei file sarebbe straordinariamente utile per alcuni progetti di programmazione che sto facendo.
Fate quanto segue:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
o -R
è ricorsivo,-n
è il numero di linea, e-w
sta per "match the whole word".-l
(L minuscola) per dare solo il nome del file corrispondente.Insieme a questi, i flag --exclude
, --include
, --exclude-dir
possono essere usati per una ricerca efficiente:
Questo cercherà solo tra quei file che hanno estensione .c o .h:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
Questo escluderà la ricerca di tutti i file che terminano con estensione .o:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Per le directory è possibile escludere una particolare directory attraverso il parametro --exclude-dir
. Per esempio, questo escluderà le directory dir1/, dir2/ e tutte quelle che corrispondono a *.dst/:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
Questo funziona molto bene per me, per raggiungere quasi lo stesso scopo come il tuo.
Per altre opzioni controlla man grep
.
Puoi usare grep -ilR
:
grep -Ril "text-to-find-here" /
i
sta per ignora caso (opzionale nel tuo caso). R
sta per ricorsivo. l
sta per "mostra il nome del file, non il risultato stesso"./
sta per iniziare dalla radice della vostra macchina.Potete usare ack. È come grep per il codice sorgente. Potete scansionare il vostro intero file system con esso.
Basta fare:
ack 'text-to-find-here'
Nella tua directory principale.
Puoi anche usare espressioni regolari, specificare il tipo di file, ecc.
AGGIORNAMENTO
Ho appena scoperto The Silver Searcher, che è come ack ma 3-5 volte più veloce di esso e ignora persino i pattern da un file .gitignore
.