Cerca sotto la directory corrente e le sottodirectory per una stringa


1

Come posso cercare tutti i file in una directory specifica che contiene una sequenza di stringhe specifica come "superuser"

cercare tutti i file nella directory corrente e nelle sottodirectory (in modo ricorsivo) se contengono il mondo "superutente"

Risposte:


2

grep di -R l'opzione fa questo:

grep -R "superuser" .

EDIT: per cercare solo i file .mp3 e restituire i loro nomi (non il contenuto corrispondente, poiché non sono comunque file di testo), utilizzare find per ottenere un elenco di .mp3 e quindi utilizzare xargs per passarli a grep -l:

find . -name "*.mp3" -print0 | xargs -0 grep -l "superuser"

Se la tua versione di find supporta -exec ... + (e almeno OS X di recente), puoi trovare run grep direttamente:

find . -name "*.mp3" -exec grep -l "superuser" {} +

Opzioni aggiuntive utili: -F accelerare le ricerche a stringa fissa; -l mostra solo i nomi dei file, non le linee corrispondenti (utile per i file binari); -m 1 smettere di leggere il file dopo la prima partita.
RedGrittyBrick

che ne dici di una lista di file con l'estensione .mp3?
user27449

@RedGrittyBrick: d'accordo -l e -m1, ma non sono d'accordo -F essere più veloce (nonostante ciò che rappresenta la F). Il grep tradizionale in realtà è più veloce (su file di grandi dimensioni / molti) in -E modalità, dal momento che ha compilato il pattern in un DFA - tempo di avvio lungo per la compilazione, ma una volta che è stato fatto è stato molto veloce. -F modalità potrebbe Sii veloce se la tua versione di grep usa l'algoritmo di Boyer-Moore (invece del vecchio ingenuo algo), ma i greps moderni di IME sono adattivi e sceglieranno automaticamente la modalità più veloce, indipendentemente dal flag che usi.
Gordon Davisson

@ Gordon: Giusto, il mio errore.
RedGrittyBrick
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.