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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.