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 文件本身是线性流式归档,不解压时查看目录树有以下几种常用方案:

  1. 树形展示(推荐):tar -tf archive.tar.gz | tree --fromfile
    • tree --fromfile 会从标准输入读取文件路径清单并渲染成与 tree / eza -T(lt)一致的树状分支图。
    • 可结合 -L <层数> 控制递归深度,例如 tree --fromfile -L 2 仅展开前两层。
  2. 快速确认顶层结构:tar -tf archive.tar.gz | awk -F'/' '{print $1}' | sort -u
    • 在解压未知 tar 包前,用于快速确认是否包含单一根目录,避免解压时产生文件散落的“tar 炸弹”。
  3. 交互式过滤:tar -tf archive.tar.gz | fzf
    • 在包内包含成千上万个文件时,直接通过 fzf 实时模糊定位目标文件路径。
  4. 无需外部工具的轻量缩进(纯文本):
    • tar -tf archive.tar.gz | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
  5. 挂载为虚拟目录(最贴近 lt 体验):
    • 使用 archivemount archive.tar.gz /mnt/archive 将归档挂载为 FUSE 文件系统,即可直接在挂载点上执行 eza -T(即 lt)、fd 或 ripgrep。查看完毕后执行 umount /mnt/archive 卸载。
  6. 交互式阅读:
    • 直接使用 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 --fromfiletree 命令选项,从标准输入读取路径列表并渲染为树状图。
-L Ntree 命令选项,限制树状结构的最大展示深度。
fzf交互式模糊查找工具,接收 stdin 输入进行实时筛选。

官方资料