globstandard
: The missing glob standardIEEE and POSIX forgot to define a standard, so here is the standard. Following globstandard
will allow your users to re-use the globs they know without unexpected behavior.
“Globs” are the patterns you type when you do stuff like ls *.js
on the command line, or put build/*
in a .gitignore
file.
Before parsing the path part patterns, braced sections are expanded into a set. Braced sections start with {
and end with }
, with any number of comma-delimited sections within. Braced sections may contain slash characters, so a{/b/c,bcd}
would expand into a/b/c
and abcd
.
The following characters have special magic meaning when used in a path portion:
*
Matches 0 or more characters in a single path portion?
Matches 1 character[...]
Matches a range of characters, similar to a RegExp range. If the first character of the range is !
or ^
then it matches any character not in the range.!(pattern|pattern|pattern)
Matches anything that does not match any of the patterns provided.?(pattern|pattern|pattern)
Matches zero or one occurrence of the patterns provided.+(pattern|pattern|pattern)
Matches one or more occurrences of the patterns provided.*(a|b|c)
Matches zero or more occurrences of the patterns provided@(pattern|pat*|pat?erN)
Matches exactly one of the patterns provided**
If a “globstar” is alone in a path portion, then it matches zero or more directories and subdirectories searching for matches. It does not crawl symlinked directories.If a file or directory path portion has a .
as the first character, then it will not match any glob pattern unless that pattern’s corresponding path part also has a .
as its first character.
For example, the pattern a/.*/c
would match the file at a/.b/c
. However the pattern a/*/c
would not, because *
does not start with a dot character.
You can make glob treat dots as normal characters by setting dot:true
in the options.
Default: false
When basename matching is enabled, **/*/
is inserted to the beginning of any pattern not beginning with /
or ./
.
Recommended naming:
matchBase
--match-base
or -b
mypattern~~B