当前位置: 首页 > news >正文

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:将一个归档文件追加到另一份归档文件末尾。其参数是要追加的归档文件名。所有归档文件必须与被追加的归档文件具有相同的格式,否则生成的归档文件可能无法在非 GNUtar 实现中使用。
  • -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 的有效值为 seekraw。 默认值为 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,。 默认 N1
  • --restrict:禁用一些潜在的危险选项。
  • --sparse-version=MAJOR[.MINOR]:设置要使用的稀疏格式的版本。 此选项隐含了 --sparse 选项。 有效的参数值为 0.00.11.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_VERSIONGNU tar 的版本号。
    • TAR_ARCHIVEtar 正在处理的归档文件名称。
    • TAR_BLOCKING_FACTOR:当前块大小系数,即一个记录中 512 字节块的数量。
    • TAR_VOLUMEtar 正在处理的卷序号 (当读取的是多卷归档文件)。
    • TAR_FORMAT:正在处理的归档文件的格式。可以是以下值之一:gnuoldgnuposixustarv7
    • 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。否则 NEWGRPNEWGID 都不需要在系统组数据库中列出。

    最终,每个所有者组为 OLDGRP 的输入文件,在归档文件中将以 NEWGRP 这个所有组和 NEWGID 这个 GID 进行存储。

  • --mode=CHANGES:强制为添加的文件设置符号模式 CHANGES

  • --mtime=DATE-OR-FILE:为添加的文件设置修改时间 mtimeDATE-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。否则,NEWUSRNEWUID 都不需要在系统组数据库中列出。

    最终,每个所有者为 OLDUSR 的输入文件,在归档文件中将以 NEWUSR 这个所有者名和 NEWUID 这个 UID 进行存储。

  • -p, --preserve-permissions, --same-permissions:提取文件权限信息(超级用户的默认行为)。

  • --preserve:等同于同时使用 -p-s 选项。

  • --same-owner:尝试以归档文件中存在的相同所有权提取文件(超级用户的默认行为)。

  • -s, --preserve-order, --same-order:按照归档文件中文件出现的顺序提取文件。

  • --sort=ORDER:创建归档文件时,根据 ORDER 对目录条目进行排序。 ORDER 可以是以下之一:nonenameinode

    默认值是 --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_VERSIONGNU tar 版本号。
    • TAR_ARCHIVEtar 正在处理的归档名。
    • TAR_BLOCKING_FACTOR:当前的块系数,即一个记录中 512 字节块的个数。
    • TAR_VOLUMEtar 正在处理的卷序号(如果读取多卷归档文件)。
    • TAR_FORMAT:正在处理的归档文件的格式。 可以是以下值之一:gnuoldgnuposixustarv7
    • 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:创建指定格式的归档文件。有效格式包括:

    • gnuGNU tar 1.13.x 版本的格式
    • oldgnuGNU 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:设置文件名或成员名被打印时的转义风格。有效值有:literalshellshell-alwayscc-maybeescapelocaleclocale

  • -R, --block-number:当输出信息时显示归档中的块号。

  • --show-omitted-dirs:当列举或提取文件时,列出不匹配搜索标准的文件夹。

  • --show-transformed-names, --show-stored-names:显示经过 --strip--transform 选项转换后的文件或归档名。

  • --totals[=SIGNAL]:显示处理完归档后的总字节数。如果给定了 SIGNAL,则显示指定信号到达时的总字节数。支持的信号有:SIGHUPSIGQUITSIGINTSIGUSR1SIGUSR2 。信号名可以忽略 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) 参数来归档符号链接指向的实际文件,而不是链接本身。

相关文章:

  • C++负载均衡远程调用学习之UDP SERVER功能
  • MATLAB技巧——norm和vecnorm两个函数讲解与辨析
  • 组件通信-$attrs
  • 重构编程范式:解码字节跳动 AI 原生 IDE Trae 的技术哲学与实践价值
  • 数据结构学习之算法复杂度
  • 2025大模型安全研究十大框架合集(10份)
  • C++之类和对象基础
  • 微服务中组件扫描(ComponentScan)的工作原理
  • 【黑马JavaWeb+AI知识梳理】后端Web基础02 - Web基础
  • 单片机-STM32部分:1、STM32介绍
  • 【C++】认识map和set
  • Vue3源码学习4-effect中为什么使用WeakMap,Set?
  • 深入理解 MyBatis 代理机制
  • 数据结构6 · BinaryTree二叉树模板
  • 【51单片机8位数码管动态显示、右向左流水显示】2022-4-16
  • OpenHarmony - 驱动使用指南,HDF驱动开发流程
  • C++11新特性_标准库_std::array
  • 51c嵌入式~电路~合集4
  • 《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
  • 计算机基础:二进制基础16,八进制加法
  • 人民日报头版头条:青春为中国式现代化挺膺担当
  • 生命与大海相连:他在300多米的深海行走,在沉船一线打捞救援
  • 保险经纪公司元保在纳斯达克挂牌上市,去年净赚4.36亿元
  • 摩天大楼天津117大厦复工背后:停工近十年,未知挑战和压力仍在
  • AI世界的年轻人,如何作答未来
  • “人工智能是年轻的事业,也是年轻人的事业”,沪上高校师生畅谈感想