Подтвердить что ты не робот

Как вы исключаете символические ссылки в grep?

Я хочу grep -R каталог, но исключаю символические ссылки, как dow я это делаю?

Может быть что-то вроде grep -R --no-symlinks или что-то еще?

Спасибо.

4b9b3361

Ответ 2

Если вы уже знаете имена (имена) символических ссылок, которые вы хотите исключить:

grep -r --exclude-dir=LINK1 --exclude-dir=LINK2 PATTERN .

Если имена (имена) символических ссылок меняются, возможно, сначала исключить символические ссылки с помощью команды find, а затем grep файлы, которые это выдает:

find . -type f -a -exec grep -H PATTERN '{}' \;

"-H" для grep добавляет имя файла к выходу (это по умолчанию, если grep ищет рекурсивно, но не здесь, где grep получает отдельные имена файлов.)

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

find . -name .git -prune -o -type f -a -exec grep -H PATTERN '{}' \;

Ответ 3

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


Если вам нужны только имена файлов, соответствующие вашему поиску:

for f in $(grep -Rl 'search' *); do if [ ! -h "$f" ]; then echo "$f"; fi; done;

Объяснение:

  • grep -R # recursive
  • grep -l # file names only
  • if [ ! -h "file" ] # bash if not a symbolic link

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

srch="whatever"; for f in $(grep -Rl "$srch" *); do if [ ! -h "$f" ]; then
  echo -e "\n## $f";
  grep -n "$srch" "$f";
fi; done;

Объяснение:

  • echo -e # enable interpretation of backslash escapes
  • grep -n # adds line numbers to output

.. Это, конечно, не идеально. Но это может сделать работу!

Ответ 4

Если вы используете старший grep, который не имеет поведения -r, описанного в ответе Aryeh Leib Taurog, вы можете использовать комбинацию find, xargs и grep:

find . -type f | xargs grep "text-to-search-for"