---
url: https://eoht.net/fe/linux/tar.md
description: 说明 tar 常用参数，用完整示例演示打包目录、生成 tar.gz、查看归档内容及解压到指定目录，区分输出归档名和输入文件，并提醒解压覆盖与路径检查。
---

# Linux tar 打包与解压：文件、目录和 gzip 压缩示例 {#linux-archive-and-extraction-commands}

`tar` 将多个文件和目录保存为一个归档；加上 `-z` 后使用 gzip 压缩，常见扩展名为 `.tar.gz` 或 `.tgz`。本文的 `-f` 打包示例需要同时写出**归档输出文件名和要打包的输入路径**；从标准输入读取文件列表或向标准输出写归档属于其他用法。

| 参数 | 含义 |
| --- | --- |
| `-c` | 创建归档 |
| `-v` | 显示正在处理的文件 |
| `-f` | 后面的参数是归档文件名 |
| `-z` | 使用 gzip 压缩或解压 |
| `-t` | 列出归档内容 |
| `-x` | 解出归档内容 |
| `-C` | 切换到指定目录后处理后续路径，注意大写 |

## 打包文件或目录

假设当前目录已经有 `project/`，分别演示不压缩和 gzip 压缩。运行前确认输出文件不存在，避免覆盖已有备份：

```sh
tar -cvf project.tar project/
tar -zcvf project.tar.gz project/
```

也可以一次打包多个输入，例如 `tar -cvf documents.tar README.md docs/`。将输出归档放在待打包目录之外，避免把归档本身包含进输入。

只打包目录中的内容、不保留最外层 `project/` 路径时：

```sh
tar -zcvf project-contents.tar.gz -C project .
```

## 查看内容再解压

```sh
tar -tvf project.tar
tar -tzvf project.tar.gz
```

先检查内部路径、文件名和符号链接是否符合预期。解压会写入文件，已有同名文件可能被覆盖；不熟悉的归档先解压到新目录，不要直接用 root 解到系统路径。

```sh
mkdir -p extracted
tar -zxvf project.tar.gz -C extracted
```

如果归档中包含 `project/`，结果位于 `extracted/project/`；如果创建时用了 `-C project .`，内容则直接位于 `extracted/`。对于未压缩的 `.tar`，使用 `tar -xvf project.tar -C extracted`。

命令完成后查看退出状态及目标目录：退出状态非零、出现权限错误或磁盘空间不足时，不应把部分解压当成完整成功。
