Usage: tar [OPTION...] [FILE]...
GNU 'tar' saves many files together into a single tape or disk archive, and can
restore individual files from the archive.
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -tvf archive.tar # List all files in archive.tar verbosely.
tar -xf archive.tar # Extract all files from archive.tar.
Main operation mode:
-A, --catenate, --concatenate append tar files to an archive
-c, --create create a new archive
--delete delete from the archive (not on mag tapes!)
-d, --diff, --compare find differences between archive and file system
-r, --append append files to the end of an archive
--test-label test the archive volume label and exit
-t, --list list the contents of an archive
-u, --update only append files newer than copy in archive
-x, --extract, --get extract files from an archive
Operation modifiers:
--check-device check device numbers when creating incremental
archives (default)
-g, --listed-incremental=FILE handle new GNU-format incremental backup
-G, --incremental handle old GNU-format incremental backup
--hole-detection=TYPE technique to detect holes
--ignore-failed-read do not exit with nonzero on unreadable files
--level=NUMBER dump level for created listed-incremental archive
--no-check-device do not check device numbers when creating
incremental archives
--no-seek archive is not seekable
-n, --seek archive is seekable
--occurrence[=NUMBER] process only the NUMBERth occurrence of each file
in the archive; this option is valid only in
conjunction with one of the subcommands --delete,
--diff, --extract or --list and when a list of
files is given either on the command line or via
the -T option; NUMBER defaults to 1
--sparse-version=MAJOR[.MINOR]
set version of the sparse format to use (implies
--sparse)
-S, --sparse handle sparse files efficiently
Local file name selection:
--add-file=FILE add given FILE to the archive (useful if its name
starts with a dash)
-C, --directory=DIR change to directory DIR
--exclude=PATTERN exclude files, given as a PATTERN
--exclude-backups exclude backup and lock files
--exclude-caches exclude contents of directories containing
CACHEDIR.TAG, except for the tag file itself
--exclude-caches-all exclude directories containing CACHEDIR.TAG
--exclude-caches-under exclude everything under directories containing
CACHEDIR.TAG
--exclude-ignore=FILE read exclude patterns for each directory from
FILE, if it exists
--exclude-ignore-recursive=FILE
read exclude patterns for each directory and its
subdirectories from FILE, if it exists
--exclude-tag=FILE exclude contents of directories containing FILE,
except for FILE itself
--exclude-tag-all=FILE exclude directories containing FILE
--exclude-tag-under=FILE exclude everything under directories
containing FILE
--exclude-vcs exclude version control system directories
--exclude-vcs-ignores read exclude patterns from the VCS ignore files
--no-null disable the effect of the previous --null option
--no-recursion avoid descending automatically in directories
--no-unquote do not unquote input file or member names
--no-verbatim-files-from -T treats file names starting with dash as
options (default)
--null -T reads null-terminated names; implies
--verbatim-files-from
--recursion recurse into directories (default)
-T, --files-from=FILE get names to extract or create from FILE
--unquote unquote input file or member names (default)
--verbatim-files-from -T reads file names verbatim (no escape or option
handling)
-X, --exclude-from=FILE exclude patterns listed in FILE
File name matching options (affect both exclude and include patterns):
--anchored patterns match file name start
--ignore-case ignore case
--no-anchored patterns match after any '/' (default for
exclusion)
--no-ignore-case case sensitive matching (default)
--no-wildcards verbatim string matching
--no-wildcards-match-slash wildcards do not match '/'
--wildcards use wildcards (default for exclusion)
--wildcards-match-slash wildcards match '/' (default for exclusion)
Overwrite control:
--keep-directory-symlink preserve existing symlinks to directories when
extracting
--keep-newer-files don't replace existing files that are newer than
their archive copies
-k, --keep-old-files don't replace existing files when extracting,
treat them as errors
--no-overwrite-dir preserve metadata of existing directories
--one-top-level[=DIR] create a subdirectory to avoid having loose files
extracted
--overwrite overwrite existing files when extracting
--overwrite-dir overwrite metadata of existing directories when
extracting (default)
--recursive-unlink empty hierarchies prior to extracting directory
--remove-files remove files after adding them to the archive
--skip-old-files don't replace existing files when extracting,
silently skip over them
-U, --unlink-first remove each file prior to extracting over it
-W, --verify attempt to verify the archive after writing it
Select output stream:
--ignore-command-error ignore exit codes of children
--no-ignore-command-error treat non-zero exit codes of children as
error
-O, --to-stdout extract files to standard output
--to-command=COMMAND pipe extracted files to another program
Handling of file attributes:
--atime-preserve[=METHOD] preserve access times on dumped files, either
by restoring the times after reading
(METHOD='replace'; default) or by not setting the
times in the first place (METHOD='system')
--clamp-mtime only set time when the file is more recent than
what was given with --mtime
--delay-directory-restore delay setting modification times and
permissions of extracted directories until the end
of extraction
--group=NAME force NAME as group for added files
--group-map=FILE use FILE to map file owner GIDs and names
--mode=CHANGES force (symbolic) mode CHANGES for added files
--mtime=DATE-OR-FILE set mtime for added files from DATE-OR-FILE
-m, --touch don't extract file modified time
--no-delay-directory-restore
cancel the effect of --delay-directory-restore
option
--no-same-owner extract files as yourself (default for ordinary
users)
--no-same-permissions apply the user's umask when extracting permissions
from the archive (default for ordinary users)
--numeric-owner always use numbers for user/group names
--owner=NAME force NAME as owner for added files
--owner-map=FILE use FILE to map file owner UIDs and names
-p, --preserve-permissions, --same-permissions
extract information about file permissions
(default for superuser)
--same-owner try extracting files with the same ownership as
exists in the archive (default for superuser)
--set-mtime-command=COMMAND
use output of the COMMAND to set mtime of the
stored archive members
--set-mtime-format=FORMAT set output format (in the sense of
strptime(3)) of the --set-mtime-command command
--sort=ORDER directory sorting order: none (default), name or
inode
-s, --preserve-order, --same-order
member arguments are listed in the same order as
the files in the archive
Handling of extended file attributes:
--acls Enable the POSIX ACLs support
--no-acls Disable the POSIX ACLs support
--no-selinux Disable the SELinux context support
--no-xattrs Disable extended attributes support
--selinux Enable the SELinux context support
--xattrs Enable extended attributes support
--xattrs-exclude=MASK specify the exclude pattern for xattr keys
--xattrs-include=MASK specify the include pattern for xattr keys
Device selection and switching:
--force-local archive file is local even if it has a colon
-f, --file=ARCHIVE use archive file or device ARCHIVE
-F, --info-script=NAME, --new-volume-script=NAME
run script at end of each tape (implies -M)
-L, --tape-length=NUMBER change tape after writing NUMBER x 1024 bytes
-M, --multi-volume create/list/extract multi-volume archive
--rmt-command=COMMAND use given rmt COMMAND instead of rmt
--rsh-command=COMMAND use remote COMMAND instead of rsh
--volno-file=FILE use/update the volume number in FILE
Device blocking:
-b, --blocking-factor=BLOCKS BLOCKS x 512 bytes per record
-B, --read-full-records reblock as we read (for 4.2BSD pipes)
-i, --ignore-zeros ignore zeroed blocks in archive (means EOF)
--record-size=NUMBER NUMBER of bytes per record, multiple of 512
Archive format selection:
-H, --format=FORMAT create archive of the given format
FORMAT is one of the following:
gnu GNU tar 1.13.x format
oldgnu GNU format as per tar <= 1.12
pax POSIX 1003.1-2001 (pax) format
posix same as pax
ustar POSIX 1003.1-1988 (ustar) format
v7 old V7 tar format
--old-archive, --portability
same as --format=v7
--pax-option=keyword[[:]=value][,keyword[[:]=value]]...
control pax keywords
--posix same as --format=posix
-V, --label=TEXT create archive with volume name TEXT; at
list/extract time, use TEXT as a globbing pattern
for volume name
Compression options:
-a, --auto-compress use archive suffix to determine the compression
program
-I, --use-compress-program=PROG
filter through PROG (must accept -d)
-j, --bzip2 filter the archive through bzip2
-J, --xz filter the archive through xz
--lzip filter the archive through lzip
--lzma filter the archive through lzma
--lzop filter the archive through lzop
--no-auto-compress do not use archive suffix to determine the
compression program
--zstd filter the archive through zstd
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
-Z, --compress, --uncompress filter the archive through compress
Local file selection:
--backup[=CONTROL] backup before removal, choose version CONTROL
--hard-dereference follow hard links; archive and dump the files they
refer to
-h, --dereference follow symlinks; archive and dump the files they
point to
-K, --starting-file=MEMBER-NAME
begin at member MEMBER-NAME when reading the
archive
--newer-mtime=DATE compare date and time when data changed only
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
only store files newer than DATE-OR-FILE
--one-file-system stay in local file system when creating archive
-P, --absolute-names don't strip leading '/'s from file names
--suffix=STRING backup before removal, override usual suffix ('~'
unless overridden by environment variable
SIMPLE_BACKUP_SUFFIX)
File name transformations:
--strip-components=NUMBER strip NUMBER leading components from file
names on extraction
--transform=EXPRESSION, --xform=EXPRESSION
use sed replace EXPRESSION to transform file
names
Informative output:
--checkpoint[=NUMBER] display progress messages every NUMBERth record
(default 10)
--checkpoint-action=ACTION execute ACTION on each checkpoint
--full-time print file time to its full resolution
--index-file=FILE send verbose output to FILE
-l, --check-links print a message if not all links are dumped
--no-quote-chars=STRING disable quoting for characters from STRING
--quote-chars=STRING additionally quote characters from STRING
--quoting-style=STYLE set name quoting style; see below for valid STYLE
values
-R, --block-number show block number within archive with each message
--show-defaults show tar defaults
--show-omitted-dirs when listing or extracting, list each directory
that does not match search criteria
--show-snapshot-field-ranges
show valid ranges for snapshot-file fields
--show-transformed-names, --show-stored-names
show file or archive names after transformation
--totals[=SIGNAL] print total bytes after processing the archive;
with an argument - print total bytes when this
SIGNAL is delivered; Allowed signals are: SIGHUP,
SIGQUIT, SIGINT, SIGUSR1 and SIGUSR2; the names
without SIG prefix are also accepted
--utc print file modification times in UTC
-v, --verbose verbosely list files processed
--warning=KEYWORD warning control
-w, --interactive, --confirmation
ask for confirmation for every action
Compatibility options:
-o when creating, same as --old-archive; when
extracting, same as --no-same-owner
Other options:
-?, --help give this help list
--restrict disable use of some potentially harmful options
--usage give a short usage message
--version print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control may be set with --backup or VERSION_CONTROL, values are:
none, off never make backups
t, numbered make numbered backups
nil, existing numbered if numbered backups exist, simple otherwise
never, simple always make simple backups
Valid arguments for the --quoting-style option are:
literal
shell
shell-always
shell-escape
shell-escape-always
c
c-maybe
escape
locale
clocale
*This* tar defaults to:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/libexec/rmt
Options (159)
| Option | Description | Source |
|---|---|---|
-A, --catenate, --concatenate | append tar files to an archive | help |
-c, --create | create a new archive | help |
--delete | delete from the archive (not on mag tapes!) | help |
-d, --diff, --compare | find differences between archive and file system | help |
-r, --append | append files to the end of an archive | help |
--test-label | test the archive volume label and exit | help |
-t, --list | list the contents of an archive | help |
-u, --update | only append files newer than copy in archive | help |
-x, --extract, --get | extract files from an archive | help |
--check-device | Check device numbers when creating incremental archives (default). | help + man |
-g, --listed-incremental FILE | Handle new GNU-format incremental backups. | help + man |
-G, --incremental | Handle old GNU-format incremental backups. | help + man |
--hole-detection TYPE | Use METHOD to detect holes in sparse files. | help + man |
--ignore-failed-read | Do not exit with nonzero on unreadable files. | help + man |
--level NUMBER | Set dump level for a created listed-incremental archive. | help + man |
--no-check-device | Do not check device numbers when creating incremental archives. | help + man |
--no-seek | Assume the archive is not seekable. | help + man |
-n, --seek | Assume the archive is seekable. | help + man |
--occurrence NUMBER | process only the NUMBERth occurrence of each file in the archive; | help |
--sparse-version MAJOR[.MINOR | set version of the sparse format to use (implies | help |
-S, --sparse | Handle sparse files efficiently. | help + man |
--add-file FILE | add given FILE to the archive (useful if its name starts with a dash) | help + man |
-C, --directory DIR | Change to DIR before performing any operations. | help + man |
--exclude PATTERN | Exclude files matching PATTERN, a glob(3)-style wildcard pattern. | help + man |
--exclude-backups | Exclude backup and lock files. | help + man |
--exclude-caches | Exclude contents of directories containing file CACHEDIR.TAG, except for the tag file itself. | help + man |
--exclude-caches-all | Exclude directories containing file CACHEDIR.TAG and the file itself. | help + man |
--exclude-ignore FILE | read exclude patterns for each directory from FILE, if it exists | help + man |
--exclude-ignore-recursive FILE | Same as --exclude-ignore, except that patterns from FILE affect both the directory and all its subdirectories. | help + man |
--exclude-tag FILE | Exclude contents of directories containing FILE, except for FILE itself. | help + man |
--exclude-tag-under FILE | Exclude everything under directories containing FILE. | help + man |
--exclude-vcs | Exclude version control system directories. | help + man |
--exclude-vcs-ignores | Exclude files that match patterns read from VCS-specific ignore files. | help + man |
--no-null | Disable the effect of the previous --null option. | help + man |
--no-recursion | Avoid descending automatically in directories. | help + man |
--no-unquote | Do not unquote input file or member names. | help + man |
--no-verbatim-files-from | Treat each line read from a file list as if it were supplied in the command line. | help + man |
--null | Instruct subsequent -T options to read null-terminated names verbatim (disables special handling of names that start with a dash). | help + man |
--recursion | Recurse into directories (default). | help + man |
-T, --files-from FILE | Get names to extract or create from FILE. | help + man |
--unquote | unquote input file or member names (default) | help + man |
--verbatim-files-from | Treat each line obtained from a file list as a file name, even if it starts with a dash. | help + man |
-X, --exclude-from FILE | Exclude files matching patterns listed in FILE. | help + man |
--anchored | Patterns match file name start. | help + man |
--ignore-case | Ignore case. | help + man |
--no-anchored | patterns match after any '/' (default for exclusion) | help + man |
--no-ignore-case | Case sensitive matching (default). | help + man |
--no-wildcards | Verbatim string matching. | help + man |
--no-wildcards-match-slash | wildcards do not match '/' | help + man |
--wildcards | Use wildcards (default for exclusion). | help + man |
--wildcards-match-slash | wildcards match '/' (default for exclusion) | help + man |
--keep-directory-symlink | Don't replace existing symlinks to directories when extracting. | help + man |
--keep-newer-files | Don't replace existing files that are newer than their archive copies. | help + man |
-k, --keep-old-files | don't replace existing files when extracting, treat them as errors | help + man |
--no-overwrite-dir | Preserve metadata of existing directories. | help + man |
--one-top-level DIR | create a subdirectory to avoid having loose files extracted | help |
--overwrite | Overwrite existing files when extracting. | help + man |
--overwrite-dir | Overwrite metadata of existing directories when extracting (default). | help + man |
--recursive-unlink | Recursively remove all files in the directory prior to extracting it. | help + man |
--remove-files | Remove files from disk after adding them to the archive. | help + man |
--skip-old-files | Don't replace existing files when extracting, silently skip over them. | help + man |
-U, --unlink-first | Remove each file prior to extracting over it. | help + man |
-W, --verify | attempt to verify the archive after writing it | help + man |
--no-ignore-command-error | Treat non-zero exit codes of children as error (default). | help + man |
-O, --to-stdout | Extract files to standard output. | help + man |
--to-command COMMAND | pipe extracted files to another program | help + man |
--atime-preserve METHOD | preserve access times on dumped files, either by restoring the times after reading (METHOD='replace'; | help |
--clamp-mtime | Only set time when the file is more recent than what was given with --mtime. | help + man |
--delay-directory-restore | Delay setting modification times and permissions of extracted directories until the end of extraction. | help + man |
--group NAME | force NAME as group for added files | help |
--group-map FILE | use FILE to map file owner GIDs and names | help + man |
--mode CHANGES | force (symbolic) mode CHANGES for added files | help + man |
--mtime DATE-OR-FILE | set mtime for added files from DATE-OR-FILE | help + man |
-m, --touch | Don't extract file modified time. | help + man |
--no-delay-directory-restore | Cancel the effect of the prior --delay-directory-restore option. | help + man |
--no-same-owner | Extract files as yourself (default for ordinary users). | help + man |
--no-same-permissions | Apply the user's umask when extracting permissions from the archive (default for ordinary users). | help + man |
--numeric-owner | Always use numbers for user/group names. | help + man |
--owner NAME | force NAME as owner for added files | help |
--owner-map FILE | use FILE to map file owner UIDs and names | help + man |
-p, --preserve-permissions, --same-permissions | Set permissions of extracted files to those recorded in the archive (default for superuser). | help + man |
--same-owner | Try extracting files with the same ownership as exists in the archive (default for superuser). | help + man |
--set-mtime-command COMMAND | use output of the COMMAND to set mtime of the stored archive members | help |
--set-mtime-format FORMAT | set output format (in the sense of strptime(3)) of the --set-mtime-command command | help |
--sort ORDER | When creating an archive, sort directory entries according to ORDER, which is one of none, name, or inode. | help + man |
-s, --preserve-order, --same-order | Tell tar that the list of file names to process is sorted in the same order as the files in the archive. | help + man |
--acls | Enable the POSIX ACLs support | help + man |
--no-acls | Disable the POSIX ACLs support | help + man |
--no-selinux | Disable the SELinux context support | help + man |
--no-xattrs | Disable extended attributes support. | help + man |
--selinux | Enable the SELinux context support | help + man |
--xattrs | Enable extended attributes support. | help + man |
--xattrs-exclude MASK | Specify the exclude pattern for xattr keys. | help + man |
--xattrs-include MASK | Specify the include pattern for xattr keys. | help + man |
--force-local | Archive file is local even if it has a colon. | help + man |
-f, --file ARCHIVE | Use archive file or device ARCHIVE. | help + man |
-F, --info-script, --new-volume-script NAME | Run COMMAND at the end of each tape (implies -M). | help + man |
-L, --tape-length NUMBER | change tape after writing NUMBER x 1024 bytes | help + man |
-M, --multi-volume | Create/list/extract multi-volume archive. | help + man |
--rmt-command COMMAND | Use COMMAND instead of rmt when accessing remote archives. | help + man |
--rsh-command COMMAND | Use COMMAND instead of rsh when accessing remote archives. | help + man |
--volno-file FILE | When this option is used in conjunction with --multi-volume, tar will keep track of which volume of a multi-volume archive it is working in FILE. | help + man |
-b, --blocking-factor BLOCKS | Set record size to BLOCKSx512 bytes. | help + man |
-B, --read-full-records | When listing or extracting, accept incomplete input records after end-of-file marker. | help + man |
-i, --ignore-zeros | ignore zeroed blocks in archive (means EOF) | help + man |
--record-size NUMBER | NUMBER of bytes per record, multiple of 512 | help + man |
-H, --format FORMAT | Create archive of the given format. | help + man |
--old-archive, --portability | Same as --format=v7. | help + man |
--pax-option keyword[[:]=value | control pax keywords | help |
--posix | Same as --format=posix. | help + man |
-V, --label TEXT | create archive with volume name TEXT; | help + man |
-a, --auto-compress | Use archive suffix to determine the compression program. | help + man |
-I, --use-compress-program PROG | filter through PROG (must accept -d) | help + man |
-j, --bzip2 | Filter the archive through bzip2(1). | help + man |
-J, --xz | Filter the archive through xz(1). | help + man |
--lzip | Filter the archive through lzip(1). | help + man |
--lzma | Filter the archive through lzma(1). | help + man |
--lzop | Filter the archive through lzop(1). | help + man |
--no-auto-compress | Do not use archive suffix to determine the compression program. | help + man |
--zstd | Filter the archive through zstd(1). | help + man |
-z, --gzip, --gunzip, --ungzip | Filter the archive through gzip(1). | help + man |
-Z, --compress, --uncompress | Filter the archive through compress(1). | help + man |
--backup CONTROL | backup before removal, choose version CONTROL | help |
--hard-dereference | follow hard links; | help + man |
-h, --dereference | follow symlinks; | help + man |
-K, --starting-file MEMBER-NAME | begin at member MEMBER-NAME when reading the archive | help + man |
--newer-mtime DATE | Work on files whose data changed after the DATE. | help + man |
-N, --newer, --after-date DATE-OR-FILE | only store files newer than DATE-OR-FILE | help + man |
--one-file-system | Stay in local file system when creating archive. | help + man |
-P, --absolute-names | Don't strip leading slashes from file names when creating archives. | help + man |
--suffix STRING | backup before removal, override usual suffix ('~' unless overridden by environment variable SIMPLE_BACKUP_SUFFIX) | help + man |
--strip-components NUMBER | Strip NUMBER leading components from file names on extraction. | help + man |
--transform, --xform EXPRESSION | Use sed replace EXPRESSION to transform file names. | help + man |
--checkpoint NUMBER | display progress messages every NUMBERth record (default 10) | help |
--checkpoint-action ACTION | execute ACTION on each checkpoint | help + man |
--full-time | Print file time to its full resolution. | help + man |
--index-file FILE | Send verbose output to FILE. | help + man |
-l, --check-links | Print a message if not all links are dumped. | help + man |
--no-quote-chars STRING | Disable quoting for characters from STRING. | help + man |
--quote-chars STRING | Additionally quote characters from STRING. | help + man |
--quoting-style STYLE | Set quoting style for file and member names. | help + man |
-R, --block-number | Show block number within archive with each message. | help + man |
--show-defaults | show tar defaults | help |
--show-omitted-dirs | When listing or extracting, list each directory that does not match search criteria. | help + man |
--show-snapshot-field-ranges | show valid ranges for snapshot-file fields | help |
--show-transformed-names, --show-stored-names | Show file or archive names after transformation by --strip and --transform options. | help + man |
--totals SIGNAL | print total bytes after processing the archive; | help |
--utc | Print file modification times in UTC. | help + man |
-v, --verbose | Verbosely list files processed. | help + man |
--warning KEYWORD | Enable or disable warning messages identified by KEYWORD. | help + man |
-w, --interactive, --confirmation | Ask for confirmation for every action. | help + man |
-o | when creating, same as --old-archive; | help + man |
-?, --help | give this help list | help |
--restrict | Disable the use of some potentially harmful options. | help + man |
--usage | give a short usage message | help |
--version | print program version | help |
--ignore-command-error | Ignore subprocess exit codes. (in the manual page but not in --help) | man |
--exclude-caches-under | Exclude everything under directories containing CACHEDIR.TAG (in the manual page but not in --help) | man |
--exclude-tag-all FILE | Exclude directories containing FILE. (in the manual page but not in --help) | man |
Exit status (3) from the manual page
0 | Successful termination. |
1 | Some files differ. |
2 | Fatal error. |