菜鸟科技网

Linux下tar命令如何高效打包解压?

tar 命令的核心概念

tar 主要有两个核心功能:

Linux下tar命令如何高效打包解压?-图1
(图片来源网络,侵删)
  1. 打包:将多个文件和目录合并成一个单一的文件,这个文件称为 归档文件,打包本身不进行压缩,只是把文件“塞”进一个文件里。
  2. 压缩:可以对归档文件进行压缩,以减少其占用的磁盘空间。

tar 命令通过不同的选项来区分是打包、解包、压缩还是解压,最关键的是记住几个核心选项:

  • -ccreate,创建一个新的归档文件。
  • -x:extract,从归档文件中解包/解压文件。
  • -ttest,列出归档文件中的内容(不解包)。
  • -vverbose,显示详细的处理过程(推荐使用,让你知道 tar 在做什么)。
  • -ffile,指定归档文件的名称。这个选项通常放在所有选项的最后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/

输出示例:

Linux下tar命令如何高效打包解压?-图2
(图片来源网络,侵删)
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

Linux下tar命令如何高效打包解压?-图3
(图片来源网络,侵删)
# -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 命令!

分享:
扫描分享到社交APP
上一篇
下一篇