GNU tar
基本语法(Synopsis)
tar [OPTION...] [FILE]...[] 表示可选项,... 表示可重复;大写名称表示需要替换的参数。
基本功能与推荐用法
tar(Tape Archive)是 Linux 下最标准的归档打包工具,支持多种压缩格式(gzip、bzip2、xz、zstd 等)的打包、解包与只读内容检视。
# --- 创建与打包 ---
tar -czf backup.tar.gz -C /path/to/src . # 打包目录内容(避免多余父路径)
tar -caf archive.tar.xz project/ # -a 自动根据扩展名选择压缩算法
# --- 查看内容与目录结构(类似 lt / tree) ---
tar -tf archive.tar.gz # 列出包内所有文件与目录路径
tar -tvf archive.tar.gz # 详细列表(权限、属主、大小、修改时间)
tar -tf archive.tar.gz | tree --fromfile # 🌟 树形结构查看(利用 tree 渲染)
tar -tf archive.tar.gz | tree --fromfile -L 2 # 限制树形深度为 2 层
tar -tf archive.tar.gz | awk -F'/' '{print $1}' | sort -u # 仅查看顶层根目录/文件
tar -tf archive.tar.gz | awk -F'/' 'NF<=2' # 控制输出层级深度在 2 层以内
tar -tf archive.tar.gz | fzf # 交互式模糊搜索包内文件
# --- 筛选与解压 ---
tar -tf archive.tar.gz --wildcards '*.conf' # 通配符筛选包内文件
tar -xzf archive.tar.gz -C ./target_dir # 解压到指定目录
tar -xzf archive.tar.gz path/to/file.txt # 只解压单个指定文件
tar -xzf archive.tar.gz --strip-components=1 -C ./target_dir # 解压时去掉顶层目录如何查看 tar 包中的目录结构(类似 lt)
由于 tar 文件本身是线性流式归档,不解压时查看目录树有以下几种常用方案:
- 树形展示(推荐):
tar -tf archive.tar.gz | tree --fromfiletree --fromfile会从标准输入读取文件路径清单并渲染成与tree/eza -T(lt)一致的树状分支图。- 可结合
-L <层数>控制递归深度,例如tree --fromfile -L 2仅展开前两层。
- 快速确认顶层结构:
tar -tf archive.tar.gz | awk -F'/' '{print $1}' | sort -u- 在解压未知 tar 包前,用于快速确认是否包含单一根目录,避免解压时产生文件散落的“tar 炸弹”。
- 交互式过滤:
tar -tf archive.tar.gz | fzf- 在包内包含成千上万个文件时,直接通过
fzf实时模糊定位目标文件路径。
- 在包内包含成千上万个文件时,直接通过
- 无需外部工具的轻量缩进(纯文本):
tar -tf archive.tar.gz | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
- 挂载为虚拟目录(最贴近
lt体验):- 使用
archivemount archive.tar.gz /mnt/archive将归档挂载为 FUSE 文件系统,即可直接在挂载点上执行eza -T(即lt)、fd或ripgrep。查看完毕后执行umount /mnt/archive卸载。
- 使用
- 交互式阅读:
- 直接使用
less archive.tar.gz或vim archive.tar.gz,无需手动解压即可在分页器/编辑器中上下浏览包内清单。
- 直接使用
推荐与注意事项:
- 解压前先检查:解压不可信的归档前,务必先用
tar -tf检查路径,警惕绝对路径(如/etc/...)或../路径穿越。 - 避免污染工作区:解压时建议始终搭配
-C <DIR>解压到目标目录。 - 自动格式识别:现代 GNU tar 支持根据扩展名自动识别压缩算法,解压或查看时直接使用
tar -xf/tar -tf即可,通常无需记忆-z/-j/-J。
示例中的选项、参数与子命令
本表解释本页示例实际出现的选项、参数、子命令及必要的辅助命令语法。
| 语法元素 | 含义 |
|---|---|
-c | 创建新的归档文件(create)。 |
-x | 从归档中提取/解压文件(extract)。 |
-t | 列出归档中的内容清单(list / table of contents)。 |
-f <FILE> | 指定归档文件路径(file)。 |
-v | 显示处理过程中的详细文件信息(verbose)。 |
-z | 使用 gzip 格式压缩或解压(.tar.gz、.tgz)。 |
-j | 使用 bzip2 格式压缩或解压(.tar.bz2)。 |
-J | 使用 xz 格式压缩或解压(.tar.xz)。 |
-a | 根据归档文件后缀名自动选择压缩程序(—auto-compress)。 |
-C <DIR> | 切换到指定目录执行操作(提取到目标目录,或打包时避免冗余前缀路径)。 |
--strip-components=N | 解压时去除文件名前 N 级目录路径。 |
--wildcards | 启用通配符匹配包内路径。 |
tree --fromfile | tree 命令选项,从标准输入读取路径列表并渲染为树状图。 |
-L N | tree 命令选项,限制树状结构的最大展示深度。 |
fzf | 交互式模糊查找工具,接收 stdin 输入进行实时筛选。 |