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

Unix подстановочные знаки? (Звездочки)

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

tmp/**/*

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

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

4b9b3361

Ответ 1

В нем говорится, чтобы войти во все подкаталоги под таблицей 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

Ответ 2

Из 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."

Ответ 3

Согласно документации 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 и т.д.

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