tar 命令的核心概念
tar 主要有两个核心功能:

- 打包:将多个文件和目录合并成一个单一的文件,这个文件称为 归档文件,打包本身不进行压缩,只是把文件“塞”进一个文件里。
- 压缩:可以对归档文件进行压缩,以减少其占用的磁盘空间。
tar 命令通过不同的选项来区分是打包、解包、压缩还是解压,最关键的是记住几个核心选项:
-c:create,创建一个新的归档文件。-x:extract,从归档文件中解包/解压文件。-t:test,列出归档文件中的内容(不解包)。-v:verbose,显示详细的处理过程(推荐使用,让你知道tar在做什么)。-f:file,指定归档文件的名称。这个选项通常放在所有选项的最后,tar -cvf archive.tar files...。-z:通过 gzip 程序进行压缩或解压,文件后缀通常是.tar.gz或.tgz。-j:通过 bzip2 程序进行压缩或解压,压缩率比 gzip 高,但速度稍慢,文件后缀通常是.tar.bz2。-J:通过 XZ 程序进行压缩或解压,压缩率最高,但速度最慢,文件后缀通常是.tar.xz。
常用操作示例
下面我们通过最常用的场景来学习 tar 命令。
场景1:打包文件(不压缩)
将 my_project 目录下的所有文件打包成 project.tar。
# -c: 创建归档 # -v: 显示过程 # -f: 指定归档文件名 project.tar tar -cvf project.tar my_project/
输出示例:

my_project/
my_project/file1.txt
my_project/file2.log
my_project/src/
my_project/src/main.c
场景2:打包并压缩(gzip)
这是最常见的情况,打包并使用 gzip 压缩,生成 project.tar.gz。
# -z: 通过 gzip 压缩 tar -czvf project.tar.gz my_project/
解释:
c: 创建z: gzip 压缩v: 显示过程f: 指定文件名project.tar.gz
场景3:打包并压缩(bzip2)
使用 bzip2 压缩,生成 project.tar.bz2。
# -j: 通过 bzip2 压缩 tar -cjvf project.tar.bz2 my_project/
场景4:打包并压缩(xz)
使用 xz 压缩,生成 project.tar.xz。

# -J: 通过 xz 压缩 tar -cJvf project.tar.xz my_project/
解包/解压操作
解压操作的核心是 -x (extract) 选项。
场景5:解压 .tar.gz 文件
解压 project.tar.gz 文件到当前目录。
# -x: 解包 # -z: gzip 解压 # -v: 显示过程 # -f: 指定文件名 tar -xzvf project.tar.gz
场景6:解压 .tar.bz2 文件
解压 project.tar.bz2 文件。
# -j: bzip2 解压 tar -xjvf project.tar.bz2
场景7:解压 .tar.xz 文件
解压 project.tar.xz 文件。
# -J: xz 解压 tar -xJvf project.tar.xz
高级和实用选项
tar 命令非常灵活,以下是一些非常实用的选项。
查看压缩包内容不解压
使用 -t (test) 选项可以快速查看一个 tar 包里有什么文件,而无需解压它。
# 查看 .tar.gz 文件内容 tar -tzvf project.tar.gz # 查看 .tar.bz2 文件内容 tar -tjvf project.tar.bz2
解压到指定目录
使用 -C (大写) 选项可以指定解压的目标目录,如果目录不存在,需要提前创建。
# 先创建目标目录 mkdir -p /tmp/my_project_backup # 解压到 /tmp/my_project_backup 目录 tar -xzvf project.tar.gz -C /tmp/my_project_backup
只解压特定文件
可以在文件名后面跟上具体的文件路径,只解压你需要的文件。
# 假设 project.tar.gz 中有 my_project/src/main.c # 只解压这个文件 tar -xzvf project.tar.gz my_project/src/main.c
排除特定文件或目录
使用 --exclude 选项可以在打包时排除不需要的文件,这个选项需要放在源文件列表之前。
# 打包 my_project 目录,但排除所有的 .log 文件和 src/ 目录 tar -czvf project_clean.tar.gz --exclude="*.log" --exclude="src/" my_project/
追加文件到已存在的归档中
使用 -r (append) 或 --append 选项可以向一个已有的 .tar 文件中追加新文件。注意:追加操作不能用于已压缩的归档(如 .tar.gz),只能用于未压缩的 .tar 文件。
# 先创建一个未压缩的归档 tar -cvf my_archive.tar file1.txt file2.txt # 向归档中追加一个新文件 file3.txt tar -rvf my_archive.tar file3.txt
更新归档中的文件
使用 -u (update) 选项可以只更新归档中比现有文件更新的文件,同样,这也只能用于未压缩的 .tar 文件。
# 假设 file1.txt 在归档创建后被修改过 # 更新归档中的 file1.txt tar -uvf my_archive.tar file1.txt
一个速查表
| 功能 | 命令 | 说明 |
|---|---|---|
| 打包 | tar -cvf archive.tar files... |
创建未压缩的归档文件 |
| 打包并 gzip 压缩 | tar -czvf archive.tar.gz files... |
最常用,创建 .tar.gz 文件 |
| 打包并 bzip2 压缩 | tar -cjvf archive.tar.bz2 files... |
创建 .tar.bz2 文件 |
| 打包并 xz 压缩 | tar -cJvf archive.tar.xz files... |
创建 .tar.xz 文件 |
tar -tvf archive.tar |
查看未压缩归档内容 | |
| 查看 .tar.gz 内容 | tar -tzvf archive.tar.gz |
查看 .tar.gz 内容 |
| 解压 | tar -xvf archive.tar |
解压未压缩归档 |
| 解压 .tar.gz | tar -xzvf archive.tar.gz |
解压 .tar.gz 文件 |
| 解压到指定目录 | tar -xzvf archive.tar.gz -C /path/to/dir |
解压到指定目录 |
| 排除文件打包 | tar -czvf a.tar.gz --exclude="*.log" dir/ |
打包时排除 .log 文件 |
重要提示
-f选项的位置:在现代版本的tar中,-f后面的文件名可以不加 ,f选项通常放在所有选项的最后,这是最常见的用法。- 区分压缩格式:务必根据文件后缀选择正确的解压选项(
-z,-j,-J),否则会报错。 -v选项:虽然v(verbose) 不是必须的,但它能提供清晰的反馈,特别是在处理大量文件时,强烈建议使用。
希望这份详细的指南能帮助你完全掌握 tar 命令!
