Linux 常用命令 - tar【归档与压缩】
简介
tar 这个名称来源于 “tape archive”,最初设计用于将文件归档到磁带上。现在,tar 命令已经成为 Linux 系统中最常用的归档工具,它可以将多个文件和目录打包成一个单独的归档文件,并且可以选择使用不同的压缩算法进行压缩,以减小归档文件的大小。tar 本身只是一个打包工具,不具备压缩功能。通过与其他压缩工具(如 gzip、bzip2、xz)结合使用,可以实现归档和压缩的双重目的。
使用方式
传统用法tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]
UNIX 风格用法tar -A [OPTIONS] ARCHIVE ARCHIVEtar -c [-f ARCHIVE] [OPTIONS] [FILE...]tar -d [-f ARCHIVE] [OPTIONS] [FILE...]tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]tar -r [-f ARCHIVE] [OPTIONS] [FILE...]tar -u [-f ARCHIVE] [OPTIONS] [FILE...]tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]
GNU 风格用法tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVEtar --create [--file ARCHIVE] [OPTIONS] [FILE...]tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]tar --append [-f ARCHIVE] [OPTIONS] [FILE...]tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]tar --update [--file ARCHIVE] [OPTIONS] [FILE...]tar --update [-f ARCHIVE] [OPTIONS] [FILE...]tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]
常用选项
操作模式
以下列出的选项告诉 GNU tar
接下来要执行的操作是什么。且必须要提供且只能提供一个模式选项。对于后面无选项参数的含义取决于这里选择的模式。
-A, --catenate, --concatenate
:将一个归档文件追加到另一份归档文件末尾。其参数是要追加的归档文件名。所有归档文件必须与被追加的归档文件具有相同的格式,否则生成的归档文件可能无法在非GNU
的tar
实现中使用。-c, --create
:创建一个新的归档文件。参数是要归档的文件名。除非使用--no-recursion
选项,否则目录将被递归归档。-d, --diff, --compare
:比较归档文件和文件系统的差异。参数是可选的,用于指定要比较的归档成员。如果未给出,则假定为当前工作目录。--delete
:从归档文件中删除成员。参数是要删除的归档成员的名称。必须至少给出一个参数。此选项不能用于压缩的归档文件。-r, --append
:将文件追加到归档文件的末尾。参数的含义与-c
或--create
相同。-t, --list
:列出归档文件的内容。参数是可选的。如果给出,则指定要列出的成员的名称。--test-label
:测试归档卷标并退出。 如果没有参数,它会打印卷标(如果有)并以返回值0
退出。 如果给出一个或多个命令行参数,tar
会将卷标与每个参数进行比较。 如果找到匹配项,则以0
退出,否则以1
退出。 除非与-v
或--verbose
选项一起使用,否则不显示任何输出。-u, --update
:追加比归档文件中对应副本更新的文件。 参数的含义与-c
和-r
选项相同。-x, --extract, --get
:从归档文件中提取文件。 参数是可选的。 如果给出,则指定要提取的归档成员的名称。--show-defaults
:显示部分tar
选项的内置默认值并退出。-?, --help
:显示帮助信息。--usage
:列出可用的选项表。--version
:显示版本信息。
操作修饰符
--check-device
:创建增量归档时检查设备编号(默认)。-g, --listed-incremental=FILE
:处理新版GNU
格式的增量备份。FILE
是快照文件的名称,tar
在其中存储附加信息,用于确定自上次增量转储以来哪些文件已更改,以及如果有更改则必须再次转储。 如果在创建归档时FILE
不存在,则将创建它,并将所有文件添加到生成的归档文件中(级别 0 转储)。 要创建非零级别N
的增量归档,需创建在级别N-1
期间创建的快照文件的副本,并将其指定为FILE
。--hole-detection=METHOD
:使用METHOD
检测稀疏文件中的空洞。 此选项着隐含了--sparse
选项。METHOD
的有效值为seek
和raw
。 默认值为seek
,在不适用时回退到raw
。-G, --incremental
:处理旧版GNU
格式的增量备份。--ignore-failed-read
:遇到不可读的文件时不以非零值退出。--level=NUMBER
:为创建的列表式增量归档设置转储级别。 目前只有--level=0
有意义:它指示tar
在转储之前截断快照文件,从而强制执行 0 级转储。-n, --seek
:假定归档文件是可查找的。 通常,tar
会自动确定归档文件是否可以查找。 此选项旨在用于此类识别失败的情况。 仅当归档文件打开以供读取时(例如,使用--list
或--extract
选项)才生效。--no-check-device
:在创建增量式归档时不检查设备号。--no-seek
:假定归档文件不可查找。--occurrence[=N]
:仅处理归档中每个文件的第N
次出现。 此选项仅在与以下子命令之一一起使用且在命令行上或通过-T
选项给出文件列表时有效:--delete
、--diff
、--extract
或--list
,。 默认N
为1
。--restrict
:禁用一些潜在的危险选项。--sparse-version=MAJOR[.MINOR]
:设置要使用的稀疏格式的版本。 此选项隐含了--sparse
选项。 有效的参数值为0.0
、0.1
和1.0
。-S, --sparse
:高效处理稀疏文件。文件系统中的某些文件可能具有实际上从未写入的段(通常是 DBM 等系统创建的数据库文件)。 给定此选项后,tar
会尝试在归档文件之前确定文件是否为稀疏文件,如果是,则通过不转储文件的空部分来减小生成的归档文件的大小。
覆盖控制选项
这些选项指定了当在将文件提取到磁盘上已存在的副本时 tar
的操作。
-k, --keep-old-files
:提取文件时不替换已存在的文件。--keep-newer-files
:不替换比其归档副本更新的已存在的文件。--keep-directory-symlink
:提取时不替换指向目录的已存在的符号链接。--no-overwrite-dir
:保留现有目录的元数据。--one-top-level[=DIR]
:提取所有文件到DIR
或在没有提供参数的情况下将文件提取到以归档基本名为名称的子文件夹中(去除--auto-compress
可识别的标准压缩后缀)。--overwrite
:提取文件时覆盖已存在的文件。--overwrite-dir
:提取文件时覆盖现有目录的元数据(默认)。--recursive-unlink
:在提取目录之前,递归删除该目录中的所有文件。--remove-files
:将文件添加到归档后,从磁盘中删除这些文件。--skip-old-files
:提取时不要替换已存在的文件,且静默跳过它们。-U, --unlink-first
:在提取覆盖每个文件之前,先删除该文件。-W, --verify
:在写入归档后,验证该归档文件。
输出流选择
-
--ignore-command-error
:忽略子进程的退出码。 -
--no-ignore-command-error
:将子进程的非零退出码视为错误。 -
-O, --to-stdout
:将文件提取到标准输出。 -
--to-command=COMMAND
:将提取的文件通过管道传递给COMMAND
。参数COMMAND
是一个外部程序的可执行路径,可以包含命令行参数。tar
将会调用该程序,并将提取文件的内容通过标准输出传递给它。同时,以下环境变量也会被设置并传递给该程序:-
TAR_FILETYPE
:文件类型,单个字母表示,有以下可能:f
:普通文件d
:目录l
:符号链接h
:硬链接b
:块设备c
:字符设备
-
TAR_MODE
:文件模式,是一个八进制数字。 -
TAR_FILENAME
:文件名。 -
TAR_REALNAME
:文件在归档中存储的名称。 -
TAR_UNAME
:文件所有者的用户名。 -
TAR_GNAME
:文件所有者所在用户组的组名。 -
TAR_ATIME
:上次访问的时间。这是个十进制数,代表了自Epoch
以来所经过的秒数。如果归档提供了纳秒级别的精度,纳秒数将附加到时间戳的小数点后。 -
TAR_MTIME
:上次修改的时间。 -
TAR_CTIME
:上次文件状态改变的时间。 -
TAR_SIZE
:文件大小。 -
TAR_UID
:文件所有者的UID
。 -
TAR_GID
:文件所有者的GID
。
另外,以下变量包含了
tar
操作模式和被处理归档的信息:TAR_VERSION
:GNU tar
的版本号。TAR_ARCHIVE
:tar
正在处理的归档文件名称。TAR_BLOCKING_FACTOR
:当前块大小系数,即一个记录中 512 字节块的数量。TAR_VOLUME
:tar
正在处理的卷序号 (当读取的是多卷归档文件)。TAR_FORMAT
:正在处理的归档文件的格式。可以是以下值之一:gnu
、oldgnu
、posix
、ustar
、v7
。TAR_SUBCOMMAND
:一个简短的选项(带前导短划线),描述了tar
正在执行的操作。
-
文件属性处理
-
--atime-preserve[=METHOD]
:保留被归档文件的访问时间。可以是在读取文件后,恢复其原始的访问时间(METHOD=replace
默认)。或是从一开始就不设置访问时间(METHOD=system
)。 -
--delay-directory-restore
:延迟设置被提取文件夹的修改时间和权限到提取结束。该选项一般用于从一个具有非常规成员顺序的归档中提取文件。 -
--group=NAME[:GID]
:强制指定NAME
作为被添加文件的所属组。 如果没有提供GID
,则NAME
可以是组名或数字GID
。 在这种情况下,缺失的部分(GID
或组名)将从当前主机的组数据库中推断出来。 -
--group-map=FILE
:从FILE
文件中读取组转换映射。 空行将被忽略。 注释以#
符号开头,并延伸到行尾。FILE
中的每个非空行都定义了一个组的转换规则。 每行必须包含两个字段,用任意数量的空白字符分隔:OLDGRP NEWGRP[:NEWGID]
OLDGRP
为需要被转换的原始组。可以是有效的组名,也可以是以+
开头的GID
。NEWGRP
为转换后的新组。 如果未提供NEWGID
,那么NEWGRP
也必须是有效的组名或以+
开头的GID
。否则NEWGRP
和NEWGID
都不需要在系统组数据库中列出。最终,每个所有者组为
OLDGRP
的输入文件,在归档文件中将以NEWGRP
这个所有组和NEWGID
这个GID
进行存储。 -
--mode=CHANGES
:强制为添加的文件设置符号模式CHANGES
。 -
--mtime=DATE-OR-FILE
:为添加的文件设置修改时间mtime
。DATE-OR-FILE
可以是几乎任何格式的日期/时间字符串,也可以是现有文件的名称。 如果是文件名,则使用该文件的mtime
。 -
-m, --touch
:不提取文件的修改时间。 -
--no-delay-directory-restore
:取消前置的--delay-directory-restore
选项。 -
--no-same-owner
:以你自己的身份提取文件(普通用户的默认行为)。 -
--no-same-permissions
:在从归档文件中提取权限时,使用用户的umask
(普通用户的默认行为) -
--numeric-owner
:始终用数字代表用户/组名 -
--owner=NAME[:UID]
:强制指定NAME
作为被添加文件的所有者。 如果没有提供UID
,则NAME
可以是用户名或数字UID
。 在这种情况下,缺失的部分(UID
或用户名)将从当前主机的用户数据库中推断出来。当与--owner-map=FILE
选项一起使用时,此选项仅影响所有者未在FILE
中列出的文件。 -
--owner-map=FILE
:从FILE
文件中读取用户转换映射。空行将被忽略。 注释以#
符号开头,并延伸到行尾。FILE
中的每个非空行都定义了一个用户的转换规则。 每行必须包含两个字段,用任意数量的空白字符分隔:OLDUSR NEWUSR[:NEWUID]
OLDUSR
为需要被转换的原始用户。 可以是有效的用户名,也可以是以+
开头的UID
(用户ID
)。NEWUSR
为转换后的新用户。如果未提供NEWUID
,那么NEWUSR
也必须是有效的用户名或以+
开头的UID
。否则,NEWUSR
和NEWUID
都不需要在系统组数据库中列出。最终,每个所有者为
OLDUSR
的输入文件,在归档文件中将以NEWUSR
这个所有者名和NEWUID
这个UID
进行存储。 -
-p, --preserve-permissions, --same-permissions
:提取文件权限信息(超级用户的默认行为)。 -
--preserve
:等同于同时使用-p
和-s
选项。 -
--same-owner
:尝试以归档文件中存在的相同所有权提取文件(超级用户的默认行为)。 -
-s, --preserve-order, --same-order
:按照归档文件中文件出现的顺序提取文件。 -
--sort=ORDER
:创建归档文件时,根据ORDER
对目录条目进行排序。ORDER
可以是以下之一:none
、name
、inode
。默认值是
--sort=none
,它按照操作系统返回的顺序存储归档成员。使用
--sort=name
可以确保创建的归档文件中的成员排序是统一且可重现的。使用
--sort=inode
可以减少创建归档文件时进行的磁盘寻道次数,因此可以大大加快归档速度。 只有在底层系统提供必要的信息时,才支持此排序顺序。
扩展文件属性
--acls
:启用POSIX ACLs
支持。--no-acls
:禁用POSIX ACLs
支持。--selinux
:启用SELinux
环境支持。--no-selinux
:禁用SELinux
环境支持。--xattrs
:启用扩展属性支持。--no-xattrs
:禁用扩展属性支持。--xattrs-exclude=PATTERN
:指定排除扩展属性键值的模式。PATTERN
是一个POSIX
正则表达式。例如,--xattrs-exclude='^user.'
将排除来自user
命名空间的属性。--xattrs-include=PATTERN
:指定包含扩展属性键的模式。PATTERN
是一个POSIX
正则表达式。
设备选择与切换
-
-f, --file=ARCHIVE
:使用归档文件或设备ARCHIVE
。如果未提供此选项,tar
将首先检查环境变量TAPE
。 如果已设置,则将其值用作归档名称。否则,tar
将采用编译时默认值。 可以使用--show-defaults
选项或在tar --help
输出的末尾检查默认值。一个归档名称包含有冒号,其用于指定远程计算机上的文件或设备。冒号之前的部分被视为机器名或 IP 地址,冒号之后的部分为文件或设备路径名。例如:
--file=remotehost:/dev/sr0
。一个可选的用户名可以添加到主机名的前面,用户名和主机名之间用
@
符号分隔。默认情况下,远程主机通过
rsh
命令被访问。现在通常使用ssh
来代替。你可以通过提供以下命令行选项来做到这一点:--rsh-command=/usr/bin/ssh
。远程主机需要支持
rmt
命令。如果其路径名与tar
的默认值不匹配,则可以使用--rmt-command
选项来告诉tar
正确的路径。 -
--force-local
:无论是否提供冒号,都将归档文件视为本地文件。 -
-F, --info-script=COMMAND, --new-volume-script=COMMAND
:在每个卷结束时运行指定脚本COMMAND
(隐含-M
选项)。这个脚本可以包含参数,其启动时将继承tar
的环境变量以及以下变量:TAR_VERSION
:GNU tar
版本号。TAR_ARCHIVE
:tar
正在处理的归档名。TAR_BLOCKING_FACTOR
:当前的块系数,即一个记录中 512 字节块的个数。TAR_VOLUME
:tar
正在处理的卷序号(如果读取多卷归档文件)。TAR_FORMAT
:正在处理的归档文件的格式。 可以是以下值之一:gnu
、oldgnu
、posix
、ustar
、v7
。TAR_SUBCOMMAND
:描述tar
正在执行操作的短选项(带有前置短划线)。TAR_FD
:文件描述符,可用于将新卷名传递给tar
。
如果脚本执行失败,
tar
会退出,否则,它将开始写入写一个卷。 -
-L, --tape-length=N
:在写入了N×1024
个字节后更换卷。如果N
后跟一个大小后缀(下文“大小后缀”章节中会详细列举),则改后缀会指定要使用的乘法系数(替代 1024)。 -
-M, --multi-volume
:创建/列出/提取多卷归档文件。 -
--rmt-command=COMMAND
:当访问远程归档时使用COMMAND
来代替rmt
。 -
--rsh-command=COMMAND
:当访问远程归档时使用COMMAND
来代替rsh
。 -
--volno-file=FILE
:当此选项与--multi-volume
结合使用时,tar
会在FILE
中记录它正在处理的多卷归档文件的卷号。
设备块
-b, --blocking-factor=BLOCKS
:将记录大小设置为BLOCKS × 512
字节。-B, --read-full-records
:当列举或提取时,接收文件结束标记后的不完整输入记录。-i, --ignore-zeros
:忽略归档中的全零块。 通常,两个连续的512
字节全零块表示文件结束(EOF
),tar
会在遇到它们后停止读取。 此选项告诉tar
继续读取,这在读取使用-A
选项创建的归档文件时非常有用。--record-size=NUMBER
:设置记录大小。NUMBER
是每个记录的字节数。 它必须是512
的倍数。 它可以附加一个大小后缀,例如--record-size=10K
,表示 10 千字节。 有关有效后缀的列表,见下文 “大小后缀” 章节。
归档格式选择
-
-H, --format=FORMAT
:创建指定格式的归档文件。有效格式包括:gnu
:GNU tar
1.13.x 版本的格式oldgnu
:GNU tar
<= 1.12 的 格式pax, posix
: POSIX 1003.1-2001 (pax) 格式ustar
:POSIX 1003.1-1988 (ustar) 格式v7
:旧版的 V7 tar 格式
-
--old-archive, --portability
:等同于--format=v7
。 -
--pax-option=keyword[[:]=value][,keyword[[:]=value]]...
:当创建pax
归档时控制其关键字。该选项等同于pax
指令的-o
选项。 -
--posix
:等同于--format=posix
。 -
-V, --label=TEXT
:创建名为TEXT
的归档文件。如果是列举或提取,则使用TEXT
作为卷名的全局模式。
压缩选项
-a, --auto-compress
:根据归档文件的后缀名自动选择压缩程序。-I, --use-compress-program=COMMAND
:使用指定的命令COMMAND
过滤数据。 该命令必须接受-d
选项,用于解压缩。 参数可以包含命令行选项。-j, --bzip2
:使用bzip2(1)
过滤归档文件。-J, --xz
:使用xz(1)
过滤归档文件。--lzip
:使用lzip(1)
过滤归档文件。--lzma
:使用lzma(1)
过滤归档文件。--lzop
:使用lzop(1)
过滤归档文件。--no-auto-compress
:禁止根据归档文件的后缀名自动选择压缩程序。-z, --gzip, --gunzip, --ungzip
:使用gzip(1)
过滤归档文件。-Z, --compress, --uncompress
:使用compress(1)
过滤归档文件。--zstd
:使用zstd(1)
过滤归档文件。
本地文件选择
-
--add-file=FILE
:将文件FILE
添加到归档文件中(当文件名以短划线-
开头时很有用)。 -
--backup[=CONTROL]
:在删除前进行备份。 可选参数CONTROL
控制备份策略。 其有效值包括:none, off
:不进行备份。t, numbered
:使用编号备份。nil, existing
:如果存在编号备份,则进行编号备份,否则进行简单备份。never, simple
:始终进行简单备份。
如果未提供
CONTROL
,则该值取自VERSION_CONTROL
环境变量。 如果未设置该变量,则假定为existing
。 -
-C, --directory=DIR
:在执行任意操作前将目录更改为DIR
。 此选项对顺序敏感,即它会影响所有后续选项。 -
--exclude=PATTERN
:排除与PATTERN
匹配的文件。PATTERN
是一个glob(3)
风格的通配符模式。 -
--exclude-backups
:排除备份文件和锁文件。 -
--exclude-caches
:排除包含文件CACHEDIR.TAG
的目录内容,但保留该标签文件本身。 -
--exclude-caches-all
:排除包含文件CACHEDIR.TAG
的目录以及该标签文件本身。 -
--exclude-caches-under
:排除包含CACHEDIR.TAG
目录下的所有内容。 -
--exclude-ignore=FILE
:在处理一个目录之前,tar
会检查这个目录中是否包含名为FILE
的文件。如果存在,tar
就会读取FILE
文件中的排除模式,并根据这些模式来排除文件。仅对当前这一个目录生效。 -
--exclude-ignore-recursive=FILE
:类似于--exclude-ignore=FILE
,但该选项会对当前目录及其子目录都生效。 -
--exclude-tag=FILE
:排除包含有FILE
的目录中的内容,但FILE
本身不会被排除。 -
--exclude-tag-all=FILE
:排除包含有FILE
的目录中的所有内容,包括FILE
。 -
--exclude-tag-under=FILE
:排除包含有FILE
的目录下的所有内容。 -
--exclude-vcs
:排除版本控制系统相关的目录(.git/.svn 等)。 -
--exclude-vcs-ignores
:排除匹配版本控制系统忽略规则文件的文件。支持的文件有:.cvsignore
,.gitignore
,.bzrignore
以及.hgignore
. -
-h, --dereference
:解析符号链接,处理其指向的文件。 -
--hard-dereference
:解析硬链接,处理其指向的文件。 -
-K, --starting-file=MEMBER
:从指定的归档成员MEMBER
开始操作。 -
--newer-mtime=DATE
:处理那些数据修改时间(mtime
)晚于指定日期DATE
的文件。如果DATE
是一个以/
或.
开头的文件名,则会使用这个文件的修改时间作为参考日期。 -
--no-null
:取消之前使用过的--null
选项的效果。 -
--no-recursion
:避免在处理目录时自动处理到其子目录。 -
--no-unquote
:在处理输入文件及归档成员名时,不进行转义。 -
--no-verbatim-files-from
:将从文件中读取的每一行都视为在命令行中的输入参数一样。即去除行首和行尾的空格,且如果一个字符串以短划线-
开始,则将其视为一个命令行参数。这是默认行为。该选项是作为使用了
--verbatim-files-from
后的恢复方案。同时该选项对其出现的位置敏感,即其会影响其后面的所有--files-from
选项,直到遇到--verbatim-files-from
选项或到达文件末尾。该选项同时也隐含了
--no-null
选项。 -
--null
:指示后续的-T, --files-from=FILE
选项在读取文件名时以NUL
作为终止符,且一字不差地处理文件名(比如对于以短划线-
开头的字符串不解释为选项)。 -
-N, --newer=DATE, --after-date=DATE
:只归档那些修改时间比指定日期DATE
更新的文件。如果DATE
以/
或.
开头,则表示它是一个文件路径,则会使用这个文件的修改时间作为参考日期。 -
--one-file-system
:创建归档时保持处于本地文件系统。 -
-P, --absolute-names
:在创建归档时,保留文件名开头的斜杠(/
)。 -
--recursion
:处理目录时,递归地进入其子目录并处理其中的内容(默认行为)。 -
--suffix=STRING
:在进行备份时使用自定义的后缀STRING
。默认的后缀是~
,除非通过设置环境变量SIMPLE_BACKUP_SUFFIX
进行了覆盖。 -
-T, --files-from=FILE
:从指定的文件FILE
中读取要提取或创建的文件名列表。除非另有说明,否则
FILE
应该包含一个由ASCII
换行符 (LF
) 分隔的文件名列表(即每行一个文件名)。读取的文件名会以与命令行参数相同的方式处理:会进行引号移除和单词分割,并且任何以-
开头的字符串都会被视为tar
命令行选项。如果这种行为不符合你的需求,可以使用
--verbatim-files-from
选项来关闭它。--null
选项指示FILE
中的文件名是由ASCII
空字符 (NUL
) 分隔的,而不是LF
。这在文件名列表是由find(1) -print0
命令生成时非常有用。 -
--unquote
:取消对文件名或成员名的引用,即移除转义字符,(这是默认行为)。 -
--verbatim-files-from
:与--no-verbatim-files-from
相反,即使获取到的字符串内有特殊字符,也将其视为文件名。该选项隐含了--null
选项。 -
-X, --exclude-from=FILE
:排除与FILE
中列出的模式相匹配的文件。
文件名转化
--strip-components=NUMBER
:从文件名中移除指定数量NUMBER
的前导目录部分。例如归档中有一个文件名为a/b/c/file.txt
,使用--strip-components=2
选项提取时,该文件将被提取到c/file.txt
。--transform=EXPRESSION, --xform=EXPRESSION
:使用sed
的替换表达式EXPRESSION
来转换文件名。
文件名匹配选项
下面这些选项同时影响排除和包含模式。
--anchored
:匹配文件名的开头。--ignore-case
:忽略大小写。--no-anchored
:在任何/
之后匹配(排除模式的默认行为)。--no-ignore-case
:区分大小写(默认行为)。--no-wildcards
:精确字符串匹配,不解析通配符。--no-wildcards-match-slash
:通配符不匹配/
。--wildcards
:使用通配符(排除模式的默认行为)。--wildcards-match-slash
:通配符匹配/
(排除模式的默认行为)。
信息输出
-
--checkpoint[=N]
:每N
条记录显示一次处理信息(默认为 10)。 -
--checkpoint-action=ACTION
:在每个检查点(checkpoint
)运行一次ACTION
。 -
--clamp-mtime
:仅当文件的修改时间比--mtime
设置的更近时才更新时间。 -
--full-time
:以完整的分辨率来打印文件的时间。 -
--index-file=FILE
:将详细的提示信息输出到FILE
中。 -
-l, --check-links
:如果存在未处理的链接,则打印提示信息。 -
--no-quote-chars=STRING
:从之前通过--quote-chars
选项所设置字符列表中移除STRING
中指定的字符。 -
--quote-chars=STRING
:始终对string
中指定的字符进行转义,无论这些字符在当前的引用风格下是否需要转义。 -
--quoting-style=STYLE
:设置文件名或成员名被打印时的转义风格。有效值有:literal
,shell
,shell-always
,c
,c-maybe
,escape
,locale
,clocale
。 -
-R, --block-number
:当输出信息时显示归档中的块号。 -
--show-omitted-dirs
:当列举或提取文件时,列出不匹配搜索标准的文件夹。 -
--show-transformed-names, --show-stored-names
:显示经过--strip
和--transform
选项转换后的文件或归档名。 -
--totals[=SIGNAL]
:显示处理完归档后的总字节数。如果给定了SIGNAL
,则显示指定信号到达时的总字节数。支持的信号有:SIGHUP
,SIGQUIT
,SIGINT
,SIGUSR1
和SIGUSR2
。信号名可以忽略SIG
前缀。 -
--utc
:以UTC
格式打印文件的修改时间。 -
-v, --verbose
:详细列举出被处理的文件。 -
--warning=KEYWORD
:使能或禁用KEYWORD
指定的报警信息。如果关键字以no-
作为前缀,表示禁用该提示,反之启动。该选项可以被多次使用。以下关键字控制
tar
的通用操作:-
all
:开启所有的报警信息(默认行为)。 -
none
:禁用所有报警信息。 -
filename-with-nuls
:%s: file name read contains nul character
-
alone-zero-block
:A lone zero block at %s
以下关键字可用于
tar --create
:-
cachedir
:%s: contains a cache directory tag %s; %s
-
file-shrank
:%s: File shrank by %s bytes; padding with zeros
-
xdev
:%s: file is on a different filesystem; not dumped
-
file-ignored
:%s: Unknown file type; file ignored
%s: socket ignored
%s: door ignored
-
file-unchanged
:%s: file is unchanged; not dumped
-
ignore-archive
:%s: file is the archive; not dumped
-
file-removed
:%s: File removed before we read it
-
file-changed
:%s: file changed as we read it
-
failed-read
:抑制关于无法读取的文件或目录的警告信息。此关键字只有与--ignore-failed-read
选项一起使用时才有效。
以下关键字可用于
tar --extract
:-
existing-file
:"%s: skipping existing file"
-
timestamp
:%s: implausibly old time stamp %s
%s: time stamp %s is %s s in the future
-
contiguous-cast
:Extracting contiguous files as regular files
-
symlink-cast
:Attempting extraction of symbolic links as hard links
-
unknown-cast
:%s: Unknown file type '%c', extracted as normal file
-
ignore-newer
:Current %s is newer or same age
-
unknown-keyword
:Ignoring unknown extended header keyword '%s'
-
decompress-program
:控制在尝试运行其他解压缩程序时发生错误的详细信息的显示。一个常见的例子如下:$ tar --warning=decompress-program -x -f archive.Z
tar (child): cannot run compress: No such file or directory
tar (child): trying gzip
这意味着
tar
首先尝试使用compress
解压缩archive.Z
,当失败后,切换到gzip
。 -
record-size
:Record size = %lu blocks
以下关键字控制增量提取:
-
rename-directory
:%s: Directory has been renamed from %s
%s: Directory has been renamed
-
new-directory
:%s: Directory is new
-
xdev
:%s: directory is on a different device: not purging
-
bad-dumpdir
:Malformed dumpdir: 'X' never used
-
-
-w, --interactive, --confirmation
:对每个操作都要求确认。
兼容性选项
-o
: 创建归档文件时,等同于--old-archive
。 解压归档文件时,等同于--no-same-owner
。
大小后缀
b
:SIZE x 512。B
:SIZE x 1024。c
:SIZE。G
:SIZE x 10243。K
:SIZE x 1024。k
:SIZE x 1024。M
:SIZE x 10242。P
:SIZE x 10245。T
:SIZE x 10244。w
:SIZE x 2。
返回值
-
0
:成功终止。 -
1
:某些文件不同。如果
tar
使用--compare (--diff, -d)
命令行选项调用,这意味着归档文件中的某些文件与其磁盘上的对应文件不同。如果
tar
使用--create
、--append
或--update
选项之一,则此退出代码表示某些文件在归档过程中被更改,因此生成的归档文件不包含文件集的精确副本。 -
2
:致命错误。 这意味着发生了一些致命的、无法恢复的错误。
参考示例
使用 gzip
格式对指定目录进行打包压缩,并显示处理过程
tar czvf test.tar.gz ./code
组合使用 c
z
v
f
选项可以创建一个指定的压缩归档文件,并且显示详细的处理过程:
jay@jaylinuxlenovo:~/test$ tar czvf test.tar.gz ./code
./code/
./code/app
./code/Makefile
./code/b.h
./code/a.c
./code/a.h
./code/a.o
jay@jaylinuxlenovo:~/test$ ll *.tar.gz
-rw-rw-r-- 1 jay jay 3374 May 2 19:18 test.tar.gz
使用 bzip2
压缩格式对指定目录进行打包压缩,并显示处理过程
tar cjvf test.tar.bz2 ./code
此处的 j
选项指定了使用 bzip2
来进行压缩:
jay@jaylinuxlenovo:~/test$ tar cjvf test.tar.bz2 ./code
./code/
./code/app
./code/Makefile
./code/b.h
./code/a.c
./code/a.h
./code/a.o
对指定目录进行归档,并显示处理信息
tar cvf test.tar ./code
此处没有使用压缩选项,因此仅仅是执行了归档并且生成了一个归档文件:
jay@jaylinuxlenovo:~/test$ tar cvf test.tar ./code
./code/
./code/app
./code/Makefile
./code/b.h
./code/a.c
./code/a.h
./code/a.o
jay@jaylinuxlenovo:~/test$ ll *.tar
-rw-rw-r-- 1 jay jay 30720 May 2 19:24 test.tar
对指定目录进行归档,并删除原始文件
tar cvf test.tar ./code --remove-files
在原归档命令的基础上加入 --remove-files
可以在归档结束后删除原始文件:
jay@jaylinuxlenovo:~/test$ tar cvf test.tar ./code --remove-files
./code/
./code/app
./code/Makefile
./code/b.h
./code/a.c
./code/a.h
./code/a.o
jay@jaylinuxlenovo:~/test$ ll ./code
ls: cannot access './code': No such file or directory
查看某个压缩包内的文件信息
tar tvf test.tar.bz2
使用 t
选项可以列举出压缩包内的文件内容,且不执行实际的解压操作:
jay@jaylinuxlenovo:~/test$ tar tvf test.tar.bz2
drwxrwxr-x jay/jay 0 2025-04-12 09:35 ./code/
-rwxrwxr-x jay/jay 16016 2025-04-12 09:35 ./code/app
-rw-rw-r-- jay/jay 212 2025-04-10 22:32 ./code/Makefile
-rw-rw-r-- jay/jay 222 2025-04-12 09:53 ./code/b.h
-rw-rw-r-- jay/jay 319 2025-04-12 09:08 ./code/a.c
-rw-rw-r-- jay/jay 160 2025-04-12 09:34 ./code/a.h
-rw-rw-r-- jay/jay 1632 2025-04-12 09:35 ./code/a.o
将指定压缩包解压到当前目录
tar jxvf test.tar.bz2
此处使用 x
选项可以将文件从归档或压缩文件中提取出来:
jay@jaylinuxlenovo:~/test$ tar jxvf test.tar.bz2
./code/
./code/app
./code/Makefile
./code/b.h
./code/a.c
./code/a.h
./code/a.o
jay@jaylinuxlenovo:~/test$ ll ./code
total 44
drwxrwxr-x 2 jay jay 4096 Apr 12 09:35 ./
drwxrwxr-x 10 jay jay 4096 May 2 19:31 ../
-rw-rw-r-- 1 jay jay 319 Apr 12 09:08 a.c
-rw-rw-r-- 1 jay jay 160 Apr 12 09:34 a.h
-rw-rw-r-- 1 jay jay 1632 Apr 12 09:35 a.o
-rwxrwxr-x 1 jay jay 16016 Apr 12 09:35 app*
-rw-rw-r-- 1 jay jay 222 Apr 12 09:53 b.h
-rw-rw-r-- 1 jay jay 212 Apr 10 22:32 Makefile
注意事项
-
使用
-A, --catenate, --concatenate
来进行归档文件的追加时需注意如果给出多个归档文件,只有在使用-i
或--ignore-zeros
选项时,才能访问最终归档文件中除第一个归档文件之外的归档文件的成员。且压缩的归档文件不能被连接。 -
使用
-u, --update
来更新归档文件时需要注意较新的文件不会替换其旧的归档副本,而是追加到归档文件的末尾。 因此,生成的归档文件可能包含多个同名成员,对应于同一文件的不同版本。 -
在进行列出或提取操作时如果结合了
-g, --listed-incremental=FILE
选项,那么实际tar
并不会检查FILE
内容,但由于语法需要FILE
,通常此时会用dev/null
来代替。 -
小心处理符号链接,可以使用
-h
(或--dereference
) 参数来归档符号链接指向的实际文件,而不是链接本身。