【go语言】gotar:使用go语言复刻tar命令,并加入7z支持,可独立运行在windows、linux、macos上

gotar

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

特性

  • 操作:-c 创建 / -x 解压 / -t 列表
  • 格式:-z gzip / -j bzip2 / -J xz / -7 7z(也可根据后缀自动猜测)
  • 常用选项:-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 上可能因权限失败并跳过
  • 属主/属组不强制恢复
相关推荐
M78佐菲3 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
益达丫4 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
chicheese7 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky7 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
vortex58 小时前
常用终端模拟器全面对比:Kitty、WezTerm、Ghostty 与 Konsole
linux
INGNIGHT9 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
zly35009 小时前
VMware Converter Standalone 物理机转化为虚拟机后源1硬盘变成了2个硬盘(2个硬盘文件)虚拟机无法启动。
linux·运维·服务器
GeW11 小时前
从内核到数据:Linux与工业数据库如何支撑高端制造
linux
小小的木头人12 小时前
Linux systemd Service 与 Timer 定时任务原理及实战
linux
熊明才13 小时前
WSL2 网络突然瘫痪(Network is unreachable / 没有 eth0)最短修复指南(2026年9月20日亲测可用)
linux·windows·wsl2