Je voudrais grep tous les fichiers sauf certains types de fichiers?

36

Comment est-ce que je récursive des grepdossiers dans des dossiers donnés excepté quelques types de fichier?

Par exemple, je recherche une chaîne dans le dossier de mon espace de travail, mais celle-ci finit par rechercher dans des fichiers SQL et génère des chaînes sérialisées.

Donc, dans ce cas, je voudrais greple dossier de l'espace de travail sauf les fichiers SQL.

Je recherche de préférence un one-liner si possible.

chrisjlee
la source
5
Sachez que Linux, Unix et Unix-A-Like n'ont pas vraiment les "types de fichiers" que vous semblez vouloir. C’est seulement par convention que les noms de fichier ont un suffixe ".c" ou ".txt" ou ".sql" - ces suffixes ne sont même pas des "extensions" de style Windows, et encore moins des indicateurs indiquant que SQL, le texte ou le code source C est actif. à l'intérieur des fichiers.
Bruce Ediger

Réponses:

8

Cela le fera pour vous et exclura les fichiers .sql et .txt:

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

Cependant, il semble que ack serait un outil bien meilleur pour ce que vous essayez de faire:

ack -a --nosql 'foobar' /some/dir
Mark McKinstry
la source
Désolé, je n'ai pas vu la partie "ack" et je l'ai mise dans ma réponse, qui est maintenant supprimée.
Chance
Un autre utilisateur notes qui ack - a --nobinaryinclut les fichiers binaires
Michael Mrozek
La barre oblique inverse dans le modèle de nom de fichier n'est pas nécessaire.
Kusalananda