Селекторные символы Unix?(Звездочки) - PullRequest
21 голосов
/ 20 августа 2010

В Ryan Bates '1001 * Railscast о git его .gitignore файл содержит следующую строку:

tmp/**/*

Что такоеЦель использования двойных звездочек, за которыми следует звездочка: **/*?Если бы просто tmp/* вместо tmp/**/* не дало бы точно такой же результат?

Погуглив проблему, я обнаружил неясную статью об этом в IBM, и мне было интересно, сможет ли кто-нибудь прояснить проблему.

Ответы [ 3 ]

25 голосов
/ 20 августа 2010

В нем говорится, что нужно перейти во все подкаталоги ниже tmp, а также только в содержимое tmp.

например. У меня есть следующее:

$ find tmp
tmp
tmp/a
tmp/a/b
tmp/a/b/file1
tmp/b
tmp/b/c
tmp/b/c/file2

согласованный вывод:

$ echo tmp/*
tmp/a tmp/b

согласованный вывод:

$ echo tmp/**/*
tmp/a tmp/a/b tmp/a/b/file1 tmp/b tmp/b/c tmp/b/c/file2

Это функция zsh по умолчанию, чтобы заставить ее работать в bash 4, вы выполняете:

shopt -s globstar
5 голосов
/ 20 августа 2010

С http://blog.privateergroup.com/2010/03/gitignore-file-for-android-development/:

(kwoods)

"The double asterisk (**) is not a git thing per say, it’s really a linux / Mac shell thing.

It would match on everything including any sub folders that had been created.

You can see the effect in the shell like so:

# ls ./tmp/* = should show you the contents of ./tmp (files and folders)
# ls ./tmp/** = same as above, but it would also go into each sub-folder and show the contents there as well."
1 голос
/ 08 апреля 2016

В соответствии с документацией gitignore этот синтаксис поддерживается начиная с версии git 1.8.2.

Вот соответствующий раздел:

Два последовательныхЗвездочки (**) в шаблонах, сопоставленных с полным путем, могут иметь особое значение:

  • Начальный **, за которым следует косая черта, означает совпадение во всех каталогах.Например, **/foo соответствует файлу или каталогу foo в любом месте, так же, как шаблон foo.**/foo/bar соответствует файлу или каталогу bar в любом месте, которое находится непосредственно в каталоге foo.

  • Трейлинг /** соответствует всему, что находится внутри.Например, abc/** соответствует всем файлам в каталоге abc относительно расположения файла .gitignore с бесконечной глубиной.

  • Косая черта, за которой следуют две последовательные звездочки, затемкосая черта соответствует нулю или нескольким каталогам.Например, a/**/b соответствует a/b, a/x/b, a/x/y/b и т. Д.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...