Chciałbym grepować wszystkie pliki oprócz niektórych typów plików?

36

Jak rekursywnie zapisywać greppliki w obrębie określonych folderów oprócz kilku typów plików?

Na przykład szukam ciągu w folderze obszaru roboczego, ale kończy się to przeszukiwaniem plików sql i generuje serializowane ciągi.

Więc w tym przypadku chciałbym przejść grepdo folderu obszaru roboczego oprócz plików sql.

Jeśli to możliwe, najlepiej szukam liniowca.

chrisjlee
źródło
5
Pamiętaj, że Linux, Unix i Unix-a-like nie mają tak naprawdę „typów plików” tak, jak chcesz. Jedynie zgodnie z konwencją nazwy plików mają sufiks „.c”, „.txt” lub „.sql” - te sufiksy nie są nawet „rozszerzeniami” w stylu Windows, a tym bardziej wskaźnikami, w których kod źródłowy SQL, tekst lub C wewnątrz plików.
Bruce Ediger,

Odpowiedzi:

8

To zrobi to za Ciebie i wykluczy pliki .sql i .txt:

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

Jednak wydaje się, że potwierdzenie byłoby znacznie lepszym narzędziem do tego, co próbujesz zrobić:

ack -a --nosql 'foobar' /some/dir
Mark McKinstry
źródło
Niestety nie widziałem części „ack” i umieściłem ją w mojej odpowiedzi, która jest teraz usunięta.
Szansa
Inny użytkownik zauważa, że ack - a --nobinaryzawiera pliki binarne
Michael Mrozek
Ukośnik odwrotny we wzorcu nazwy pliku nie jest potrzebny.
Kusalananda