---
name: "borg-extract"
section: "1"
platform: "linux"
package: "borg"
version: "1.4.5-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/borg-extract"
---

# borg-extract(1)

Extract archive contents

## Name

borg-extract - Extract archive contents

## SYNOPSIS

borg \[common options\] extract \[options\] ARCHIVE \[PATH...\]

## DESCRIPTION

This command extracts the contents of an archive.

By default, the entire archive is extracted, but a subset of files and directories can be selected by passing a list of **PATH** arguments. The default interpretation for the paths to extract is *pp:* which is a literal path-prefix match. If you want to use e.g. a wildcard, you must select a different pattern style such as *sh:* or *fm:*. See *borg\_patterns* for more information.

The file selection can be further restricted by using the **--exclude** option. For more help on include/exclude patterns, see the *borg\_patterns* command output.

By using **--dry-run**, you can do all extraction steps except actually writing the output data: reading metadata and data chunks from the repository, checking the hash/HMAC, decrypting, and decompressing.

**--progress** can be slower than no progress display, since it makes one additional pass over the archive metadata.

**Note:**

Currently, extract always writes into the current working directory ("."), so make sure you **cd** to the right place before calling **borg extract**.

When parent directories are not extracted (because of using file/directory selection or any other reason), Borg cannot restore parent directories' metadata, e.g., owner, group, permissions, etc.

## OPTIONS

See *[borg-common(1)](/borg-common/1.md)* for common options of Borg commands.

### arguments

- **ARCHIVE**

  archive to extract

- **PATH**

  paths to extract; patterns are supported

### options

- **--list**

  output verbose list of items (files, dirs, ...)

- **-n, --dry-run**

  do not actually change any files

- **--numeric-owner**

  deprecated, use **--numeric-ids** instead

- **--numeric-ids**

  only obey numeric user and group identifiers

- **--nobsdflags**

  deprecated, use **--noflags** instead

- **--noflags**

  do not extract/set flags (e.g. NODUMP, IMMUTABLE)

- **--noacls**

  do not extract/set ACLs

- **--noxattrs**

  do not extract/set xattrs

- **--stdout**

  write all extracted data to stdout

- **--sparse**

  create holes in output sparse file from all-zero chunks

### Include/Exclude options

- **-e** *PATTERN,* **--exclude** *PATTERN*

  exclude paths matching PATTERN

- **--exclude-from** *EXCLUDEFILE*

  read exclude patterns from EXCLUDEFILE, one per line

- **--pattern** *PATTERN*

  include/exclude paths matching PATTERN

- **--patterns-from** *PATTERNFILE*

  read include/exclude patterns from PATTERNFILE, one per line

- **--strip-components** *NUMBER*

  Remove the specified number of leading path elements. Paths with fewer elements will be silently skipped.

## EXAMPLES

```
# Extract entire archive
$ borg extract /path/to/repo::my-files
# Extract entire archive and list files while processing
$ borg extract --list /path/to/repo::my-files
# Verify whether an archive could be successfully extracted, but do not write files to disk
$ borg extract --dry-run /path/to/repo::my-files
# Extract the "src" directory
$ borg extract /path/to/repo::my-files home/USERNAME/src
# Extract the "src" directory but exclude object files
$ borg extract /path/to/repo::my-files home/USERNAME/src --exclude '*.o'
# Extract only the C files
$ borg extract /path/to/repo::my-files 'sh:home/USERNAME/src/*.c'
# Restore a raw device (must not be active/in use/mounted at that time)
$ borg extract --stdout /path/to/repo::my-sdx | dd of=/dev/sdx bs=10M
```

## SEE ALSO

*[borg-common(1)](/borg-common/1.md)*, *[borg-mount(1)](/borg-mount/1.md)*

## Author

The Borg Collective
