GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire la ricerca Grep su tutti i file e in tutte le directory

Grep è uno strumento eccellente quando devi cercare il contenuto di un file.

Di solito, esegui grep su un singolo file come questo:

grep search_term filename

Grep è abbastanza versatile. Se vuoi cercare tutti i file in una directory con grep , usalo in questo modo:

grep search_term *

C'è un problema con esso. Cerca solo in tutti i file nella directory corrente. Non cercherà nelle sottodirectory.

Puoi effettuare cerca grep in tutti i file e in tutte le sottodirectory della directory corrente usando il -r opzione di ricerca ricorsiva:

grep -r search_term . 

Puoi anche specificare il percorso della directory se non ti trovi nella directory in cui desideri eseguire la ricerca:

grep -r search_term directory_path

Questo è stato un breve riassunto. Lascia che ti mostri tutto questo in dettaglio con esempi appropriati in modo che sia più facile da capire.

Ricerca Grep in tutti i file di una directory

Ecco la struttura della directory che userò in questo esempio. Ad eccezione di empty.txt, tutti i file contengono il termine 'semplice' su cui eseguirò la ricerca grep.

[email protected]:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

Per cercare la parola 'semplice' in tutti i file delle directory correnti, basta usare il carattere jolly (*). Il carattere jolly sostituisce effettivamente il nome di tutti i file e le directory nella directory corrente.

grep simple *

Questo cercherà in tutti i file nelle directory correnti, ma non entrerà nelle sottodirectory. Dal momento che non puoi grep direttamente la ricerca su una directory, mostrerà l'errore "XYZ è una directory" insieme ai risultati della ricerca.

Se non ti trovi nella stessa directory in cui desideri eseguire, puoi specificare il percorso della directory e terminarlo con /*

grep search_term directory_path/*

Fondamentalmente, stai usando il carattere jolly per espandere tutti gli elementi (file e directory) della directory data.

Ora che lo sai, vediamo come puoi eseguire una ricerca ricorsiva con grep in modo che esamini anche i file nelle sottodirectory.

Ricerca ricorsiva Grep in tutte le sottodirectory di una directory

Grep fornisce un -r opzione per la ricerca ricorsiva. Con questa opzione, grep esaminerà tutti i file nella directory corrente (o specificata) e esaminerà anche tutti i file di tutte le sottodirectory.

Ecco la ricerca ricorsiva che ho eseguito nell'esempio precedente per eseguire una ricerca grep nella cartella corrente:

grep -r simple .

Ecco il risultato:

C'è anche un -R opzione per la ricerca ricorsiva e funziona quasi come il -r opzione.

grep -R simple .

Allora, qual è la differenza grep -r e grep -R ? Solo uno, in realtà. Il -R è una ricerca dereferenziata, il che significa che seguirà i collegamenti simbolici per andare al file originale (che potrebbe trovarsi in qualche altra parte del sistema).

Dai un'occhiata all'output di -R cerca nello stesso esempio:

Hai notato che fornisce un risultato di ricerca aggiuntivo con il linked.txt che è fondamentalmente un collegamento simbolico ed è stato omesso dalla ricerca grep con -r opzione?

Se non sei nella directory in cui desideri eseguire la ricerca ricorsiva, fornisci semplicemente il percorso assoluto o relativo della directory al comando grep:

grep -r search_term path_to_directory

Tutto sembra a posto, ma cosa succede se si desidera escludere una determinata directory dalla ricerca ricorsiva? C'è una disposizione anche per questo. Te l'ho detto, grep è un comando estremamente versatile.

grep -r --exclude-dir=dir_name serach_term directory_path

Non è quello. Puoi escludere più di una sottodirectory dalla ricerca ricorsiva nel modo seguente:

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

Ecco come appaiono le directory escluse nel nostro esempio qui:

E sì, come dimostrato dall'esempio sopra, l'esclusione funziona sia con -r e -R opzioni ricorsive.

Per riassumere

Ecco un breve riepilogo dell'utilizzo della ricerca grep per più file e directory:

Comando Grep Descrizione
stringa grep * Cerca in tutti i file nella directory corrente
dir della stringa grep Cerca in tutti i file nella directory dir
grep -r stringa . Ricerca ricorsiva in tutti i file in tutte le sottodirectory
grep -r stringa dir Ricerca ricorsiva in tutti i file in tutte le sottodirectory di dir
grep -R stringa . Come r ma segue i collegamenti simbolici

Spero che questo suggerimento rapido di grep ti piaccia. Se vuoi di più, puoi leggere questo tutorial dettagliato sull'uso del comando grep:

Fammi sapere se hai domande o suggerimenti su questo argomento.


Linux
  1. Come cercare e rimuovere le directory in modo ricorsivo su Linux

  2. Come archiviare file e directory in Linux [Parte 2]

  3. Come archiviare file e directory in Linux [Parte 1]

  4. Riga di comando:cerca e sostituisci in tutti i nomi di file corrispondenti a grep

  5. Come elencare in modo ricorsivo tutti i file e le directory

Come copiare file e directory in Linux

Come spostare file e directory in Linux (comando mv)

Come eseguire la ricerca del modello nei file utilizzando Grep

Come utilizzare il comando cp per copiare file e directory

Come sincronizzare file e directory utilizzando Zaloha.sh

Come eseguire il backup di file e directory utilizzando Rsync in Linux