gotar
用 Go 实现的跨平台归档工具,兼容常用 tar 命令并支持 gzip / bzip2 / xz / 7z (LZMA2) ,无需系统安装外部压缩程序。

特性
- 操作:
-c创建 /-x解压 /-t列表 - 格式:
-zgzip /-jbzip2 /-Jxz /-77z(也可根据后缀自动猜测) - 常用选项:
-f/-v/-C/--exclude - 兼容 GNU 风格与传统粘连选项(如
czvf) - 纯 Go,无 CGO,支持 Windows / Linux / macOS
- 解压时防护 Zip Slip(路径穿越)
- 性能优化:最多 4 路并行 gzip / bzip2 / xz、4MiB IO 缓冲、目录创建缓存、小文件并行写盘
- 压缩格式默认使用速度优先参数;相比平衡压缩参数,生成文件可能略大
安装
bash
go build -o gotar.exe ./cmd/gotar
用法
bash
# 打包并 gzip 压缩
gotar -czvf archive.tar.gz mydir/
# 传统写法
gotar czvf archive.tar.gz mydir/
# 列表
gotar -tzvf archive.tar.gz
# 解压到指定目录
gotar -xzvf archive.tar.gz -C outdir
# xz / bzip2
gotar -cJvf archive.tar.xz mydir/
gotar -cjvf archive.tar.bz2 mydir/
# 创建 / 解压 7z(传统粘连选项)
gotar c7vf archive.7z mydir/
gotar x7vf archive.7z -C outdir
# 排除
gotar -czvf a.tar.gz --exclude='*.log' --exclude='tmp/*' mydir/
选项说明
| 选项 | 说明 |
|---|---|
-c |
创建归档 |
-x |
解压 |
-t |
列出内容 |
-f <file> |
归档文件(- 表示 stdin/stdout) |
-v |
详细输出 |
-z |
gzip |
-j |
bzip2 |
-J |
xz |
-7 |
7z(LZMA2) |
-C <dir> |
create 时相对该目录收集;extract 时解压到该目录 |
--exclude=<pat> |
排除匹配路径(可多次) |
未显式指定压缩算法时,会根据文件名后缀猜测:
.tar.gz/.tgz→ gzip.tar.bz2/.tbz2→ bzip2.tar.xz/.txz→ xz.7z→ 7z
开发
bash
go test ./...
go build -o gotar.exe ./cmd/gotar
与系统 tar 的差异(首版)
- 不支持
append/update/ 增量备份 - 不支持 zstd 等额外格式
- 硬链接在部分平台会降级
- 符号链接在 Windows 上可能因权限失败并跳过
- 属主/属组不强制恢复