【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 上可能因权限失败并跳过
  • 属主/属组不强制恢复
相关推荐
2501_9159090628 分钟前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode
承渊政道40 分钟前
Linux网络学习【数据链路层、ARP工作过程与ARP欺骗详解】
linux·网络·学习·数据链路层·arp
CS_Zero1 小时前
安卓开发:Linux的android工具命令
android·linux·运维
念何架构之路1 小时前
Go 标准库 database/sql 详解
数据库·sql·golang
女神下凡1 小时前
芯参谋(84):Linux eMMC 驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件
modelmd1 小时前
Go 切片、映射常见使用场景
开发语言·后端·golang
请为小H留灯9 小时前
Mac 常用操作与维护技巧
macos·电脑·清理电脑·常用技巧
无足鸟ICT10 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
闪亮的路灯10 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF10 小时前
nmcli
linux·服务器·网络