Was ist der ** Glob Charakter?

86

Ich habe diesen Pfad in meiner Reaktions-Gulpfile:

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'
};

Was ist der Doppelkugelcharakter?

Ich weiß, was der einzelne Globus ist ... aber was ist der doppelte? Single Glob

Jwan622
quelle

Antworten:

100

Es ist fast dasselbe wie das einzelne Sternchen, kann jedoch aus mehreren Verzeichnisebenen bestehen .

Mit anderen Worten, while entspricht /x/*/yEinträgen wie:

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

und so weiter (mit nur einem Verzeichnisebene im Wildcard - Abschnitt), der Doppelstern /x/**/ywird auch Dinge passen wie:

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

mit dem Konzept "beliebig viele Ebenen", einschließlich Null (mit anderen Worten, /x/**/ywird /x/yals eine seiner Entscheidungen übereinstimmen ).


Abgesehen davon, so sehr ich es hasse, dem Mainframe irgendetwas zuzuschreiben , glaube ich, dass dies seit den Tagen der Ohrliste von MVS verwendet wurde, um die Auswahl von Datensätzen auf mehreren Ebenen zu ermöglichen :-)

paxdiablo
quelle
2
Das macht keinen Sinn. Wenn * 0 oder mehr Zeichen bezeichnet, könnte dieses Muster möglicherweise mit / x // y übereinstimmen, was unsinnig ist. Was Sie wirklich sagen, ist "eine beliebige Anzahl von Zeichen, gefolgt von einer beliebigen Anzahl von Zeichen". Ist das nicht nur ... oh, ich weiß nicht ... eine beliebige Anzahl von Zeichen ???
AleksandrH
6
@AleksandrH, nein, dies ist keine Regex im normalen Sinne: Es gibt keine Übereinstimmung von Zeichen, nur Verzeichnisnamen. Dies gilt speziell für hierarchische Dateisysteme. Wenn in Ihrem ersten Punkt leere Verzeichnisnamen zulässig /x//ywären , wäre dies vollkommen gültig. Ich habe jedoch noch nie ein Dateisystem gesehen, das dies zulässt. In Ihrem zweiten Punkt *stimmen die Mittelwerte mit "einem beliebigen Verzeichnisnamen, nur einer Ebene" überein (gehen also nicht über den nächsten /Teiler hinaus), während die **Mittelwerte "eine beliebige Anzahl von Ebenen mit einem beliebigen Verzeichnisnamen auf jeder Ebene abgleichen" (können so viele überschreiten) /Teiler nach Bedarf).
Paxdiablo
9
Es ist erwähnenswert, dass für /x/**/y/, /x/y/ist auch enthalten, was ordentlich ist.
Yassine Imounachen
24

Es wird normalerweise verwendet, um eine beliebige Anzahl von Unterverzeichnissen anzugeben. Damit

src/js/**/*.js

Würde passen

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

etc
etc
Sean
quelle
8
Ein einzelnes Sternchen würde auch Ihren Beispielen entsprechen. Ich denke, Sie wollten Ihrem zweiten Beispiel ein zusätzliches Unterverzeichnis hinzufügen.
Simon East
1
@ SimonEast so? src / js / files / controller / user.js, src / js / files / models / foo / var.js
AutumnSky
21

**Entspricht einem beliebigen Zeichen, einschließlich eines Schrägstrichs. /
*Entspricht einem beliebigen Zeichen mit Ausnahme eines Schrägstrichs (um nur dem Datei- oder Verzeichnisnamen zu entsprechen.)

Thomas S.
quelle