tar 归档

tar 为多个文件和目录创建一个档案(归档),通常与压缩工具(如 gzipbzip )结合使用。

提示

归档的一般用途

  • 把一大堆的文件和目录归档成一个 tar 包,便于网络传输。
  • 生成 tar 包后,再用其它的程序进行压缩。

命令格式:

tar 命令有三种模式,一种是传统的命令模式,一种是 Unix 命令模式,一种是 GNU 的命令模式。使用中常以传统命名为主,下边主要介绍传统命令模式。

# 传统模式
    tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

# UNIX 模式
    tar -A [OPTIONS] ARCHIVE ARCHIVE
    tar -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 ARCHIVE
    tar --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...]

常用选项:

必要选项:

在参数中仅能使用一个,不同时使用,如: tar -cd

-A, --catenate, --concatenate
    将归档附加到另一个归档的末尾

-c, --create
    创建新的归档

-d, --diff, --compare
    查找归档和文件之间的差异

-t, --list
    列出归档内容

-r, --append
    添加文件到归档中

-u, --update
    更新归档中的文件

-x, --extract, --get
    从归档中提取文件

其它选项:

-a, --auto-compress
    使用归档后缀来决定压缩程序

-b, --blocking-factor=BLOCKS
    设置区块大小

-C, --directory=DIR
    指定提取路径

--delete
    从归档中删除文件

-exclude=PATTERN
    归档时排除指定的文件

-f, --file=ARCHIVE
    指定归档文件名(文件名必须紧跟在 -f 参数之后)

-h, --dereference
    跟踪符号链接,将它指向的文件添加到归档中

-i, --ignore-zeros
    忽略归档中的空文件

-j, --bzip2
    通过 bzip2 归档(创建、解压 tar.bz2)

-J, --xz
    通过 xz 归档(创建、解压 tar.xz)

-k, --keep-old-files
    提取时不替换已经存在的文件

-m, --touch
    不提取文件的修改时间

-M, --multi-volume
    创建/列出/提取 多卷归档

-n, --seek
    归档可检索

-N, --newer=DATE, --after-date=DATE
    只归档比日期或文件更新的文件

-O, --to-stdout
    提取文件到标准输出

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

-U, --unlink-first
    在提取归档之前先删除文件

-v, --verbose
    显示详细的执行过程

-w, --interactive, --confirmation
    每次操作都要求确认

-W, --verify
    在完成操作后尝试校验归档

-z, --gzip, --gunzip, --ungzip
    通过 gzip 归档(创建、解压 tar.gz)

-Z, --compress, --uncompress
    通过 Z 归档(创建、解压 tar.Z)

使用实例:

归档

# 将 /etc/ 和 /root/anaconda-ks.cfg 归档到当前目录
[Linux]$ tar -cvf myarchive.tar /etc /root/anaconda-ks.cfg

# 查看归档中的内容,并不提取文件
[Linux]$ tar -tvf myarchive.tar

# 追加文件到归档中
[Linux]$ tar -rvf myarchive.tar /media/fstab

# 将 scf/ 归档,但不包括 service 文件
[Linux]$ tar --exclude scf/service -zcvf scf.tar.gz scf/*

解包

# 提取 tar 包中的文件到当前目录下
[Linux]$ tar -xvf myarchive.tar

# 提取 tar 包中的文件到指定目录
[Linux]$ tar -xvf myarchive.tar -C /tmp/

# 提取指定归档文件到指定目录,先指定目录否则会出现意外结果
[Linux]$ tar -C /tmp/ root/anaconda-ks.cfg -xvf /root/myarchive.tar root/anaconda-ks.cfg
[Linux]$ ls -l /tmp/root/anaconda-ks.cfg
-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg

# 比指定日期新的文件才归档
[Linux]$ tar -N "2012/11/13" -cvf log17.tar /media/fstab

归档并压缩

创建归档文件,并以 gzip 压缩(.tar.gz 或 .tgz)

# 压缩
[Linux]$ tar -zcvf myarchive.tar.gz /etc/ /opt/

# 解压
[Linux]$ tar -zxvf myarchive.tgz

# 查看压缩文件列表
[Linux]$ tar -tvf myarchive.tgz

创建归档文件,并以 bz2 压缩(.tar.bz2 或 .tbz2)

# 压缩
[Linux]$ tar -jcvf myarchive.tar.bz2 /etc/ /opt/

# 解压
[Linux]$ tar -jxvf myarchive.tbz2