method
Archive.extract
Extract the archive contents to a directory on disk.
Creates the target directory and any necessary parent directories if they don't exist. Existing files are overwritten.
On Linux and macOS, nothing is written through a symlink in the target directory that is absolute or leads out of it. The promise rejects when a file entry needs such a symlink, unless options.glob is set, which skips the entry. The code of the error is "EXDEV", and its path is the path of the entry relative to the target directory.
The directory path to extract to
Optional extraction options
A promise that resolves with the number of entries extracted (files, directories, and symlinks)
Extract all entries:
const archive = new Bun.Archive(tarballBytes);
const count = await archive.extract("./extracted");
console.log(`Extracted ${count} entries`);Referenced types
interface ArchiveExtractOptions
Options for extracting archive contents.
- glob?: string | readonly string[]
Glob pattern(s) to filter which entries are extracted. Uses the same syntax as Bun.Glob, including support for wildcards (
*,**), character classes ([abc]), alternation ({a,b}), and negation (!pattern).Patterns are matched against archive entry paths normalized to use forward slashes (
/), regardless of the host operating system. Always write patterns using/as the separator.- Positive patterns: Only entries matching at least one pattern are extracted.
- Negative patterns (prefixed with
!): Entries matching these patterns are excluded. Negative patterns are applied after positive patterns.
If not specified, all entries are extracted.
// Extract only TypeScript files await archive.extract("./out", { glob: "**" + "/*.ts" }); // Extract files from multiple directories await archive.extract("./out", { glob: ["src/**", "lib/**"] }); // Exclude node_modules using negative pattern await archive.extract("./out", { glob: ["**", "!node_modules/**"] }); // Extract source files but exclude tests await archive.extract("./out", { glob: ["src/**", "!**" + "/*.test.ts"] });