Vorrei grep tutti i file tranne alcuni tipi di file?


36

Come posso ricorsivamente grepfile all'interno di una determinata cartella tranne un paio di tipi di file?

Ad esempio, sto cercando una stringa nella mia cartella dell'area di lavoro, ma finisce per cercare all'interno dei file sql e genera stringhe serializzate.

Quindi, in questo caso, vorrei grepla cartella dell'area di lavoro tranne i file sql.

Preferibilmente sto cercando un one-liner se possibile.


5
Tieni presente che Linux e Unix e unix-a-like non hanno davvero "tipi di file" nel modo in cui sembri desiderare. È solo per convenzione che i nomi dei file hanno un suffisso ".c" o ".txt" o ".sql" - quei suffissi non sono nemmeno "estensioni" in stile Windows, tanto meno indicatori che codice SQL o testo o C attivo all'interno dei file.
Bruce Ediger

Risposte:



8

Questo lo farà per te ed escluderà i file .sql e .txt:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

Tuttavia sembra che ack sarebbe uno strumento molto migliore per quello che stai cercando di fare:

ack -a --nosql 'foobar' /some/dir

Spiacenti, non ho visto la parte "ack" e l'ho inserita nella mia risposta, che ora è stata eliminata.
Probabilità

Un altro utente nota che ack - a --nobinaryinclude file binari
Michael Mrozek

La barra rovesciata nel modello di nome file non è necessaria.
Kusalananda
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.