【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 上可能因权限失败并跳过
  • 属主/属组不强制恢复
相关推荐
草莓熊Lotso2 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君2 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
贝锐11 小时前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien200412 小时前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
小张同学a.15 小时前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
Best-Wishes17 小时前
BurpSuite Pro教育版在linux系统中配置
linux·运维·服务器·网络安全·burpsuite
wuminyu17 小时前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
虎王物联17 小时前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux
GeW18 小时前
不只靠技术:RHCE考试的5个隐藏得分点
linux
老当益壮梁奶奶18 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法