Unix подстановочные знаки? (Звездочки)
В Ryan Bates Railscast о git его файл .gitignore содержит следующую строку:
tmp/**/*
Какова цель использования двойных звездочек, а затем звездочка как таковая: **/*
?
Использовал бы просто tmp/*
вместо tmp/**/*
не достичь точно такого же результата?
В связи с проблемой, я нашел неясную статью IBM об этом, и мне было интересно, может ли кто-нибудь прояснить эту проблему.
Ответы
Ответ 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
и т.д.
-
Другие последовательные звездочки считаются недействительными.