1. tar 命令(.tar, .tar.gz, .tar.bz2, .tar.xz 等)
核心选项
-C 目录 或 --directory=目录
指定解压的目标目录。这个目录必须已经存在,否则 tar 会报错,不会自动创建。
基础用法
# 先创建目标目录(如果不存在)
mkdir -p /path/to/target
# 解压到指定目录
tar -xf archive.tar.gz -C /path/to/target
注意事项
-C 的位置有讲究
如果命令行中有多个操作,-C 的作用范围是从它出现的位置开始,直到下一个 -C 或命令结束。
对于单纯的解压,放在最后最清晰:
tar -xzvf archive.tar.gz -C /path/to/target
相对路径与绝对路径
tar -xf archive.tar -C ./output # 相对路径
tar -xf archive.tar -C /abs/path # 绝对路径
如果不加 -C,默认解压到当前目录。
自动识别压缩格式
现代 GNU tar 不需要显式指定 -z(gzip)、-j(bzip2)、-J(xz),直接用 -xf 即可自动识别。
Windows 的 tar(如 Git Bash、WSL)
行为基本一致,但要注意路径分隔符,在 Git Bash 里推荐使用 Unix 风格路径或带引号的 Windows 路径。
常见错误
tar -xf archive.tar.gz -C /nonexist
# tar: /nonexist: Cannot open: No such file or directory
解决:先 mkdir -p /nonexist。
2. unzip 命令(.zip)
核心选项
-d 目录
指定解压的目标目录。如果目录不存在,unzip 会自动创建(包括多层目录)。
基础用法
unzip archive.zip -d /path/to/target
注意事项
目录自动创建
即使 /path/to/target 不存在,unzip 也会自动逐级创建,不需要提前 mkdir。
覆盖行为
默认会询问是否覆盖已存在的文件。常用附加选项:
只解压特定文件到目录
unzip archive.zip "*.txt" -d /target
特殊字符与空格
如果目标路径包含空格,用引号:
unzip archive.zip -d "/path/with space/target"
3. 7z 命令(.7z,也支持 zip、tar、rar 等)
核心选项
-o目录 (注意:-o 和目录名之间没有空格)
指定解压输出目录。目录不存在时会自动创建。
基础用法
# 7z x 表示解压并保持原有目录结构,推荐使用
7z x archive.7z -o/path/to/target
# 7z e 表示将所有文件解压到同一级(忽略原结构)
7z e archive.7z -o/path/to/target
注意事项
-o 不能有空格
✅ -o/target
❌ -o /target (会被误解为另外的选项)
目录自动创建
与 unzip 类似,目标目录不存在时会自动创建。
解压密码保护文件
7z x archive.7z -o/target -p密码
跨平台
7-Zip 在 Linux/macOS 上对应 p7zip 或 7z 命令,参数一致。
4. unrar 命令(.rar)
核心用法
- 直接解压并指定目标路径:
unrar x archive.rar /path/to/target/
示例
# 保持目录结构解压到指定文件夹
unrar x archive.rar /path/to/target/
# 所有文件直接解压到目标(平铺)
unrar e archive.rar /path/to/target/
注意:某些版本要求目标路径已存在,但大多数现代版会自动创建。
5. 单文件压缩格式(.gz, .bz2, .xz)的处理
gzip、bzip2、xz 本身只能压缩单个文件,通常与 tar 配合使用。如果只是单独的 .gz 文件(没有 tar),可以这样解压到指定目录:
方法一:使用 -c 输出到 stdout,重定向
gzip -dkc file.gz > /path/to/target/file
# -d 解压,-k 保留原文件,-c 输出到标准输出
方法二:解压后再移动
gzip -d file.gz
mv file /path/to/target/
方法三:用管道配合 tar(不常见)
单文件压缩不需要 tar,直接重定向最直接。
常见命令总结对比
| | | |
|---|
| -C 目录 | 不会创建,需手动 | tar -xf a.tar.gz -C /target |
| -d 目录 | | unzip a.zip -d /target |
| -o目录 | | 7z x a.7z -o/target |
| | | unrar x a.rar /target/ |
| | | gzip -dkc file.gz > /target/file |
实战建议
写脚本时防错
# tar 解压一定要先确保目录存在
mkdir -p "$DEST_DIR" && tar -xf "$ARCHIVE" -C "$DEST_DIR"
避免权限问题
如果目标目录在系统保护区,记得加 sudo,或者解压到用户有权限的位置(如 /home/user/)。