Что делает звездочку (*), делают в grep-nri "searchString" *?

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

grep -nri "String"

тогда как большинство моих коллег делает это:

grep -nri "String" *

Что делает последний ( * часть)?

4
задан 27 April 2018 в 13:52

1 ответ

grep с -r флаг воздействует на все файлы в указанных каталогах рекурсивно:

-r, --recursive
      Read all files  under  each  directory,  recursively,  following
      symbolic  links only if they are on the command line.  Note that
      if  no  file  operand  is  given,  grep  searches  the   working
      directory.  This is equivalent to the -d recurse option.

По умолчанию, если никакие каталоги не даны, то grep обработает все файлы в текущем каталоге.

В grep -r ... *, затем, оболочка расширяется * во все файлы и каталоги в текущем каталоге (обычно кроме тех, которые начинают с a .), и grep затем работы рекурсивно над ними.

Так, если у Вас был каталог, который содержал, например:

.git/
.gitignore
foo/
foo/.foo2
foo/link2 -> /foo2/bar2
bar
link1 -> /foo/bar

где имена, заканчивающиеся / каталоги, затем grep -r также обработал бы .gitignore файл и все в .git, но grep -r ... * был бы exand к grep -r ... foo bar, и закончился бы, исключая .gitignore и .git (но это включало бы foo/.foo2).

Также отметьте точку о символьных ссылках - если один из файлов в расширении * если бы символьная ссылка был, то цель символьной ссылки была бы обработана, если бы Вы использовали *. Таким образом с *, /foo/bar будет обработан как цель link1, но нет /foo2/bar2 как цель link2.

Полный эффект:

                                 w/o *           with *
.git/                              +                -
.gitignore                         +                -
foo/                               +                +
foo/.foo2                          +                +
foo/link2 -> /foo2/bar2            -                -
bar                                +                +
link1 -> /foo/bar                  -                +

То, которое Вы хотите сделать, конечно, зависит от того, хотите ли Вы те файлы и каталоги, включенные в поиск; но я склонен предпочитать иметь grep самостоятельно сделайте исключение и включая использование --exclude/--include и другие опции.

8
ответ дан 1 December 2019 в 09:06

Другие вопросы по тегам:

Похожие вопросы: