Schnellstart
Ein Verzeichnis nach Dateien durchsuchen, die mit *.ts übereinstimmen:
ts
import { Glob } from "bun";
const glob = new Glob("**/*.ts");
// Durchsucht das aktuelle Arbeitsverzeichnis und jedes seiner Unterverzeichnisse rekursiv
for await (const file of glob.scan(".")) {
console.log(file); // => "index.ts"
}Einen String mit einem Glob-Muster abgleichen:
ts
import { Glob } from "bun";
const glob = new Glob("*.ts");
glob.match("index.ts"); // => true
glob.match("index.js"); // => falseGlob ist eine Klasse, die die folgende Schnittstelle implementiert:
ts
class Glob {
scan(root: string | ScanOptions): AsyncIterable<string>;
scanSync(root: string | ScanOptions): Iterable<string>;
match(path: string): boolean;
}
interface ScanOptions {
/**
* Das Stammverzeichnis, von dem der Abgleich beginnt. Standardmäßig `process.cwd()`
*/
cwd?: string;
/**
* Erlaubt Mustern, Einträge zu übereinstimmen, die mit einem Punkt (`.`) beginnen.
*
* @default false
*/
dot?: boolean;
/**
* Gibt den absoluten Pfad für Einträge zurück.
*
* @default false
*/
absolute?: boolean;
/**
* Gibt an, ob Nachkommen von symbolischen Link-Verzeichnissen durchlaufen werden sollen.
*
* @default false
*/
followSymlinks?: boolean;
/**
* Wirft einen Fehler, wenn ein symbolischer Link unterbrochen ist
*
* @default false
*/
throwErrorOnBrokenSymlink?: boolean;
/**
* Gibt nur Dateien zurück.
*
* @default true
*/
onlyFiles?: boolean;
}Unterstützte Glob-Muster
Bun unterstützt die folgenden Glob-Muster:
? - Stimmt mit einem einzelnen Zeichen überein
ts
const glob = new Glob("???.ts");
glob.match("foo.ts"); // => true
glob.match("foobar.ts"); // => false* - Stimmt mit null oder mehr Zeichen überein, außer mit Pfadtrennzeichen (/ oder \)
ts
const glob = new Glob("*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => false** - Stimmt mit einer beliebigen Anzahl von Zeichen überein, einschließlich /
ts
const glob = new Glob("**/*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => true
glob.match("src/index.js"); // => false[ab] - Stimmt mit einem der in den Klammern enthaltenen Zeichen überein, sowie mit Zeichenbereichen
ts
const glob = new Glob("ba[rz].ts");
glob.match("bar.ts"); // => true
glob.match("baz.ts"); // => true
glob.match("bat.ts"); // => falseSie können Zeichenbereiche (z.B. [0-9], [a-z]) sowie die Negationsoperatoren ^ oder ! verwenden, um alles zu übereinstimmen außer den in den Klammern enthaltenen Zeichen (z.B. [^ab], [!a-z])
ts
const glob = new Glob("ba[a-z][0-9][^4-9].ts");
glob.match("bar01.ts"); // => true
glob.match("baz83.ts"); // => true
glob.match("bat22.ts"); // => true
glob.match("bat24.ts"); // => false
glob.match("ba0a8.ts"); // => false{a,b,c} - Stimmt mit einem der angegebenen Muster überein
ts
const glob = new Glob("{a,b,c}.ts");
glob.match("a.ts"); // => true
glob.match("b.ts"); // => true
glob.match("c.ts"); // => true
glob.match("d.ts"); // => falseDiese Muster können tief verschachtelt sein (bis zu 10 Ebenen) und beliebige der oben genannten Wildcards enthalten.
! - Negiert das Ergebnis am Anfang eines Musters
ts
const glob = new Glob("!index.ts");
glob.match("index.ts"); // => false
glob.match("foo.ts"); // => true\ - Maskiert eines der oben genannten Sonderzeichen
ts
const glob = new Glob("\\!index.ts");
glob.match("!index.ts"); // => true
glob.match("index.ts"); // => falseNode.js fs.glob()-Kompatibilität
Bun implementiert auch Node.js' fs.glob()-Funktionen mit zusätzlichen Features:
ts
import { glob, globSync, promises } from "node:fs";
// Array von Mustern
const files = await promises.glob(["**/*.ts", "**/*.js"]);
// Muster ausschließen
const filtered = await promises.glob("**/*", {
exclude: ["node_modules/**", "*.test.*"],
});Alle drei Funktionen (fs.glob(), fs.globSync(), fs.promises.glob()) unterstützen:
- Array von Mustern als erstes Argument
exclude-Option zum Filtern von Ergebnissen