Linux grep исключить каталог

рекурсивный grep: исключить определенные каталоги

Я часто использую рекурсивный grep для поиска исходных файлов с конкретным контентом.

На больших кодовых базах это может быть медленным, поэтому я использую —incldue для ограничения расширений / белых списков.

Тем не менее, было бы более эффективно исключить (удалить) целые подкаталоги, я думаю:

Но —exclude поддерживает только шаблоны файлов, такие как * .java выше. Как я могу исключить каталоги?

Вы можете посмотреть в АСК .

Я только начал использовать это, но это кажется подходящим для этого.

вы можете использовать вместо поиска:

Итак, это немного задом наперед, сначала вы получите результаты grep, а затем путь. Может быть, у кого-то еще есть лучший ответ?

Вот полный пример скрипта в одном из моих проектов, который может помочь, я называю этот файл «all_source» (помеченный как исполняемый файл) и помещаю его в корневой каталог моего проекта, затем называю его grep myfunc $(./all_source) сортировкой в ​​конце скрипта полностью по желанию.

Этот скрипт возвращает все имена файлов в проекте, которые совпадают *.h, *.cpp, *.c, *.lua, *.*awk , но не выполняет поиск во всех папках с именами .svn и gen, а также пропускает папки ./lib и ./vc6 (но только те, которые находятся прямо в корне проекта). Поэтому, когда вы делаете grep myfunc $(./all_source) это только greps в этих файлах. Вам также нужно будет вызвать это из корневого каталога проекта.

Источник

рекурсивный grep: исключить определенные каталоги

Я часто использую рекурсивный grep для поиска исходных файлов с конкретным контентом.

На больших кодовых базах это может быть медленным, поэтому я использую —incldue для ограничения расширений / белых списков.

Однако было бы эффективнее исключить (удалить) целые подкаталоги, я думаю:

Но —exclude поддерживает только шаблоны файлов, такие как * .java выше. Как я могу исключить каталоги?

6 ответов 6

Вы можете посмотреть в АСК.

Я только начал использовать это, но это кажется хорошо подходящим для этого.

вы можете использовать вместо поиска:

Итак, это немного задом наперед, сначала вы получите результаты grep, а затем путь. Может быть, у кого-то еще есть лучший ответ?

Вот полный пример скрипта в одном из моих проектов, который может помочь. Я называю этот файл «all_source» (помеченный как исполняемый файл) и помещаю его в корневой каталог моего проекта, затем называю его grep myfunc $(./all_source) как в конце сценария совершенно необязательно.

Этот скрипт возвращает все имена файлов в проекте, которые соответствуют *.h, *.cpp, *.c, *.lua, *.*awk , но не выполняет поиск во всех папках с именами .svn и gen, а также в папках. пропуская папки для ./lib и ./vc6 (но только те, которые находятся прямо в корне проекта). Таким образом, когда вы делаете grep myfunc $(./all_source) он только grep в этих файлах. Вам также нужно будет вызвать это из корневого каталога проекта.

Существует также опция -prune, чтобы найти:

Источник

Как я могу исключить каталоги из grep -R?

Я хочу пройти через все подкаталоги, кроме каталога «node_modules».

РЕШЕНИЕ 1 (объединить find и grep )

Цель этого решения не в том, чтобы иметь дело с grep производительностью, а в том, чтобы продемонстрировать переносимое решение: оно также должно работать с занятой версией или GNU версии старше 2.5.

Читайте также:  Git client для windows

Используйте find , для исключения каталогов foo и bar:

Затем совместим find и нерекурсивное использование grep , в качестве переносимого решения:

РЕШЕНИЕ 2 (рекурсивное использование grep ):

Вы уже знаете это решение, но я добавляю его, так как это самое последнее и эффективное решение. Обратите внимание, что это менее портативное решение, но более удобочитаемое.

Чтобы исключить несколько каталогов, используйте —exclude-dir как:

РЕШЕНИЕ 3 (Ag)

Если вы часто просматриваете код, Ag (The Silver Searcher) — гораздо более быстрая альтернатива grep, настроенная для поиска кода. Например, он автоматически игнорирует файлы и каталоги, перечисленные в .gitignore , так что вам не нужно постоянно передавать те же громоздкие опции исключения для grep или find .

Последние версии GNU Grep (> = 2.5.2 ) предоставляют:

который исключает каталоги, соответствующие шаблону, dir из рекурсивных поисков по каталогам.

Так что вы можете сделать:

Для получения дополнительной информации о синтаксисе и использовании см.

Для более старых GNU Greps и POSIX Grep используйте, find как предлагается в других ответах.

Или просто используйте ack ( Edit : или The Silver Searcher ) и покончите с этим!

Если вы хотите исключить несколько каталогов :

«r» для рекурсии, «l» для печати только имен файлов, содержащих совпадения, и «i» для игнорирования различий в регистре:

Пример: я хочу найти файлы, содержащие слово «привет». Я хочу искать во всех моих каталогах linux, кроме каталога proc , загрузочного каталога, каталога sys и корневого каталога:

Примечание: приведенный выше пример должен быть root

Примечание 2 (согласно @skplunkerin): не ставьте пробелы после запятых в

расширяется с помощью оболочки (например, Bash), а не с помощью grep этого:

Заключение в кавычки предотвратит расширение оболочки, поэтому это не сработает:

Используемые шаблоны —exclude-dir — это шаблоны того же типа, которые описаны на странице руководства для —exclude опции:

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

Вы можете использовать фигурные скобки и шаблоны исключений в кавычках вместе, как это:

Шаблон может охватывать несколько сегментов пути:

Это исключило бы каталог как topdir/something/else .

Часто используйте это:

grep может использоваться вместе с -r (рекурсивным), i (игнорировать регистр) и -o (печатает только совпадающую часть строк). Чтобы исключить files использование —exclude и исключить использование каталогов —exclude-dir .

Собрав все вместе, вы получите что-то вроде:

Описание этого звучит намного сложнее, чем есть на самом деле. Проще проиллюстрировать на простом примере.

Пример:

Предположим, я ищу текущий проект для всех мест, где я явно установил строковое значение debugger во время сеанса отладки, и теперь хочу просмотреть / удалить.

Я пишу сценарий с именем findDebugger.sh и использую, grep чтобы найти все вхождения. Однако:

Для файловых исключений — я хочу убедиться, что .eslintrc это игнорируется (на самом деле это правило linting, debugger поэтому его следует исключить). Кроме того, я не хочу, чтобы мой собственный сценарий упоминался в каких-либо результатах.

Для исключений из каталогов — я хочу исключить, так node_modules как он содержит много библиотек, на которые есть ссылки, debugger и меня не интересуют эти результаты. Кроме того, я просто хочу опустить .idea и .git скрытые каталоги, потому что меня не волнуют эти места поиска, и я хочу сохранить результативность поиска.

Источник

Как я могу исключить каталоги с помощью команды grep -R

Главное меню » Ubuntu » Как я могу исключить каталоги с помощью команды grep -R

Предпосылки:

Дайте понять, что у вас установлен и настроен любой дистрибутив Linux. Мы используем систему Ubuntu 20.04 для реализации в этой статье. С другой стороны, у вас также должны быть права пользователя root. Откройте командный терминал, чтобы начать работу.

Читайте также:  Linux cat to buffer

Пример 01:

Когда вы открываете командный терминал, вы находитесь в домашнем каталоге системы Ubuntu 20.04. Давайте перейдем в каталог документов. Для этого вы должны использовать указанную ниже команду cd в командной оболочке вместе с путем к каталогу.

Теперь вы находитесь в каталоге Documents вашей системы Linux. Создадим три новых файла в каталоге Documents. Чтобы создать новые файлы текстового типа, попробуйте следующую сенсорную команду в оболочке, за которой следует имя нового файла. Как видите, мы создали три файла с именами «one.txt», «new.txt» и «test.txt».

Вы должны добавить некоторые текстовые данные или информацию в каждый файл отдельно, как вы можете видеть на изображениях ниже. Теперь сохраните все файлы и закройте.

Теперь вернитесь к терминалу и перечислите все файлы и папки, перечисленные в каталоге Documents. Выполните простую команду ls, чтобы сделать это, как показано ниже. У вас будет вывод всех файлов и папок, лежащих в каталоге Documents. Вы можете видеть, что недавно созданные и обновленные текстовые файлы также присутствуют.

Теперь наша очередь попробовать команду grep –R для каталога Documents и его файлов или папок. Мы будем использовать команду grep –R, чтобы исключить каталоги при использовании одного ключевого слова или уникального слова. У нас будет команда, которая будет искать это конкретное слово во всех файлах, находящихся в папке Documents, за исключением одного каталога, который был указан для исключения в команде. Итак, мы собираемся исключить каталог «Wild», который в настоящее время присутствует в каталоге «Documents». Итак, попробуйте следующую команду grep, чтобы исключить каталог «Wild» вместе с флагом –R, который использовался для рекурсивной функции, а «AndreyEx» использовался в качестве ключевого слова для поиска в файлах.

Посмотрим на оба файла. Попробуйте выполнить команду cat, чтобы увидеть, что файл «new.txt» содержит ключевое слово «AndreyEx».

Другой файл, «test.txt», содержащий ключевое слово «AndreyEx», был отображен с помощью приведенной ниже команды cat.

Теперь давайте исключим тот же каталог «Wild» из папки «Documents» с помощью другого ключевого слова «brave», если он находится в каких-либо файлах. Итак, попробуйте следующую команду grep, чтобы исключить каталог, как показано ниже. Выходное изображение показывает два совпадающих выходных файла для ключевого слова «brave» в двух файлах, «test.txt» и «one.txt».

Вы можете проверить, что файл «one.txt» содержит ключевое слово «Documents», используя команду cat.

В выводе файла «test.txt», можно проверить ключевое слово «brave» с использованием команды cat.

Пример 02:

Давайте перейдем в подкаталог «Wild» папки «Documents» с помощью команды cd в оболочке.

Давайте создадим три новых файла, «bin.txt», «had.txt» и «sec.txt» в каталоге «Wild», используя указанную ниже сенсорную команду. Добавьте текстовые данные во все файлы, сохраните и закройте их.

Давайте перечислим все каталоги, используя команду ls, как показано ниже. В нем вы найдете все три вновь созданных файла.

Давайте попробуем ту же команду grep в вашем командном терминале, чтобы исключить каталог «Wild» при использовании другого ключевого слова «I» в качестве соответствия, как показано ниже.

Теперь вывод этой команды показывает ключевое слово «I» в файлах, содержащихся в папке Documents, в то время как каталог «Wild» был проигнорирован с использованием ключевого слова «exclude-dir».

Теперь давайте исключим тот же каталог «Wild» с помощью другого ключевого слова «rimsha» из команды grep, показанной ниже в терминале.

Пример 03:

Давайте сначала перейдем в папку «Documents», используя команду cd, как показано ниже.

Теперь перечислим все файлы и папки с документами, используя команду ls ниже. Вывод показывает некоторый текст и другие файлы вместе с одним подкаталогом «Wild».

Читайте также:  Российские браузеры для windows

Воспользуемся той же командой grep, чтобы исключить каталог «Wild» из этой папки, используя ключевое слово «AndreyEx» во флаге. Вывод показывает четыре текстовых файла, в тексте которых есть слово «AndreyEx», в то время как каталог «Wild» был исключен и не проверялся.

Заключение:

Используя Ubuntu 20.04, мы уже понимаем, как и когда использовать команду grep –R. Команда grep чрезвычайно универсальна и помогает находить текст, встроенный в сотни документов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Как исключить в Grep

В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью grep.

Исключить слова и шаблоны

Чтобы отображать только те строки, которые не соответствуют поисковому шаблону, используйте параметр -v (или –invert-match).

Например, чтобы напечатать строки, которые не содержат строку, nologinвы должны использовать:

Опция -w говорит grepвернуть только те строки, где указанная строка представляет собой целое слово (заключенные символы без слов).

По умолчанию учитывается регистр grep. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные. Чтобы игнорировать регистр при поиске, вызовите grep с опцией -i.

Если строка поиска содержит пробелы, вам необходимо заключить ее в одинарные или двойные кавычки.

Чтобы указать два или более шаблонов поиска, используйте опцию -e:

Вы можете использовать опцию -e сколько угодно раз.

Другой вариант исключения нескольких шаблонов поиска – объединение шаблонов с помощью оператора ИЛИ |.

В следующем примере печатаются строки, не содержащие строк nologin или bash:

GNU grepподдерживает три синтаксиса регулярных выражений: базовый, расширенный и совместимый с Perl. По умолчанию grepинтерпретирует шаблон как базовое регулярное выражение, в котором метасимволы, например, | теряют свое особое значение, и вы должны использовать их версии с обратной косой чертой.

Если вы используете опцию расширенного регулярного выражения -E, то оператор | не следует экранировать, как показано ниже:

Вы можете указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. В следующем примере исключаются строки games, в которых строка находится в самом начале строки:

Вывод команды может быть отфильтрован grepчерез конвейер, и только строки, соответствующие заданному шаблону, будут напечатаны на терминале.

Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются от имени пользователя «root», вы можете отфильтровать вывод команды ps:

Исключить каталоги и файлы

Иногда при выполнении рекурсивного поиска с опциями -r или -R вы можете захотеть исключить определенные каталоги из результатов поиска.

Чтобы исключить каталог из поиска, воспользуйтесь опцией –exclude-dir. Путь к исключенному каталогу относительно каталога поиска.

Вот пример, показывающий, как искать строку andreyex во всех файлах внутри /etc, за исключением каталога /etc/pki:

Чтобы исключить несколько каталогов, заключите исключенные каталоги в фигурные скобки и разделите их запятыми без пробелов.

Например, чтобы найти файлы , которые содержат строку «gnu» в вашей системе Linux исключая proc, bootи sysкаталоги , которые вы бы запустить:

При использовании сопоставления с подстановочными знаками вы можете исключить файлы, базовое имя которых совпадает с GLOB, указанным в опции –exclude.

В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за исключением файлов andreyex, оканчивающихся на .pngи .jpg:

Заключение

Команда grepпозволяет исключить шаблоны и каталоги при поиске файлов.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью