Jaki jest znak ** glob?

87

Mam tę ścieżkę w moim pliku reagowania:

var path = {
  HTML: 'src/index.html',
  ALL: ['src/js/*.js', 'src/js/**/*.js', 'src/index.html'],
  JS: ['src/js/*.js', 'src/js/**/*.js'],
  MINIFIED_OUT: 'build.min.js',
  DEST_SRC: 'dist/src',
  DEST_BUILD: 'dist/build',
  DEST: 'dist'
};

Jaki jest znak podwójnej globu?

Wiem, co to jest pojedyncza kulka ... ale co to jest podwójna? pojedynczy glob

Jwan622
źródło

Odpowiedzi:

101

Jest prawie taki sam jak pojedyncza gwiazdka, ale może składać się z wielu poziomów katalogu.

Innymi słowy, while /x/*/ydopasuje wpisy takie jak:

/x/a/y
/x/b/y

i tak dalej (z tylko jednym poziomem katalogu w sekcji symboli wieloznacznych), podwójna gwiazdka /x/**/ybędzie również pasować do takich rzeczy, jak:

/x/any/number/of/levels/y

z pojęciem „dowolnej liczby poziomów”, w tym również zero (innymi słowy, /x/**/ybędzie pasować /x/yjako jedna z opcji).


Na marginesie, chociaż nienawidzę przypisywać mainframe'owi czegokolwiek, uważam, że było to używane od czasów MVS, aby umożliwić wybór zestawów danych na wielu poziomach :-)

paxdiablo
źródło
2
To nie ma sensu. Jeśli * oznacza 0 lub więcej znaków, to ten wzorzec może potencjalnie pasować do / x // y, co jest bezsensowne. To, co tak naprawdę mówisz, to „dowolna liczba znaków, po której następuje dowolna liczba znaków”. Czy to nie tylko ... och, nie wiem ... jakąkolwiek liczbę znaków ???
AleksandrH
7
@AleksandrH, nie, to nie jest wyrażenie regularne w normalnym sensie: nie ma dopasowywania znaków, tylko nazwy katalogów. Dotyczy to szczególnie hierarchicznych systemów plików. Po pierwsze, gdyby dozwolone były puste nazwy katalogów, /x//ybyłoby to całkowicie poprawne. Jednak nigdy nie widziałem systemu plików, który na to pozwala. W drugim punkcie, *środki pasują do „dowolnej nazwy katalogu, tylko jednego poziomu” (więc nie wykraczają poza następny /separator), natomiast **oznaczają „dopasuj dowolną liczbę poziomów z dowolną nazwą katalogu na każdym poziomie” (może przekroczyć tyle /przekładki w razie potrzeby).
paxdiablo
9
Warto zauważyć, że w przypadku /x/**/y/, /x/y/jest również, co jest miłe.
Yassine Imounachen
24

Zwykle jest używany do wskazania dowolnej liczby podkatalogów. Więc

src/js/**/*.js

Pasowałby

src/js/files/*.js
src/js/more-files/*.js

etc
etc
Sean
źródło
8
Pojedyncza gwiazdka również pasowałaby do Twoich przykładów. Myślę, że chciałeś dołączyć dodatkowy podkatalog do drugiego przykładu.
Simon East
1
@SimonEast jak to? src / js / files / controllers / user.js, src / js / files / models / foo / var.js
AutumnSky
21

**dopasowuje dowolny znak, w tym ukośnik, /
*pasuje do dowolnego znaku z wyjątkiem ukośnika (aby dopasować tylko nazwę pliku lub katalogu)

Thomas S.
źródło