从别人那拷来一个 tar.gz,不确定里面是一层目录还是一堆散文件,直接解压到当前目录可能把工作区搞乱。这时候先 tar -t 看一眼最省事。
-t 是列表模式
tar -tf backup.tar.gz 里的 t 表示 list,只读压缩包的索引,把里面的文件名逐个打印出来,不落盘。加 v 会带上权限、属主、大小、时间,输出格式接近 ls -l。注意参数顺序,-tf 比 -ft 稳妥,f 后面必须紧跟文件名。
配合 grep 做检查
tar -tzvf app.tar.gz | head -20
tar -tf app.tar.gz | grep php | wc -l
第二条能数出包里有几个 php 文件。想确认有没有绝对路径或者点号开头的危险路径,就 grep 一下相关条目,这类包解压时可能覆盖系统文件,宁可不装也别硬解。
几种压缩格式都能用
- tar:纯归档不压缩,tar -tf 直接看。
- tar.gz:tar -tzf 看,新版 tar 会自动识别,z 可省。
- tar.bz2:加 j 参数,GNU tar 也能自动识别。
- tar.xz:加 J 参数,老版本 tar 需要显式指定。
两个实用变体
只想看某一层目录的内容,用 tar -tf 配 wildcards 过滤;想从包里单独抽一个文件,用 tar -xf app.tar.gz 加文件路径,不用全解。如果报 gzip: stdin: not in gzip format,说明文件其实不是 gzip,可能后缀写错或者下载没完成,先 file 一下确认真实类型。
再补一句,tar -t 只读索引,遇到损坏的包它会在报错前把能读的条目先列出来,正好用来判断是包本身残缺还是解压工具不对。加一个压制告警的参数可以让输出更干净,但别养成忽略所有警告的习惯。