Я хотел бы grep все файлы, кроме некоторых типов файлов?


36

Как я могу рекурсивно grepфайлы в заданных папках, кроме пары типов файлов?

Например, я ищу строку в папке моей рабочей области, но она заканчивается поиском в файлах sql и генерирует сериализованные строки.

Так что в этом случае я бы хотел, чтобы grepпапка рабочего пространства, кроме файлов sql.

Я предпочтительно ищу однострочник, если это возможно.


5
Имейте в виду, что Linux, Unix и unix-a-лайки на самом деле не имеют «типов файлов» так, как вам кажется. Только условно, что имена файлов имеют суффикс ".c" или ".txt" или ".sql" - эти суффиксы даже не являются "расширениями" в стиле Windows, а тем более указывают на то, что исходный код SQL, текста или C работает внутри файлов.
Брюс Эдигер

Ответы:



8

Это сделает это за вас и исключит файлы .sql и .txt:

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

Однако, похоже, что ack был бы гораздо лучшим инструментом для того, что вы пытаетесь сделать:

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

Извините, я не увидел часть «ack» и добавил ее в свой ответ, который теперь удален.
Шанс

Еще один пользователь отмечает, что ack - a --nobinaryвключает в себя двоичные файлы
Майкл Мрозек

Обратная косая черта в шаблоне имени файла не требуется.
Кусалананда
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.