【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 上可能因权限失败并跳过
  • 属主/属组不强制恢复
相关推荐
就牙白8 小时前
中科方德服务器打包RPM
linux·python
REDcker9 小时前
基于 eBPF 的网络可观测:协议栈路径与 sk_buff
linux·服务器·网络·php·ebpf·bpf
看-是灰机9 小时前
使用go语言实现对接
linux·开发语言·后端·docker·语言模型·golang·飞书
草莓熊Lotso9 小时前
【Linux网络】深入理解Linux IO多路复用:从本质到select服务器实战
linux·运维·服务器·c语言·网络·数据库·c++
fen_fen9 小时前
麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)
linux·服务器·.net
fen_fen9 小时前
Filebeat 采集 应用日志部署 & Kibana 查询操作文档
linux·运维·服务器
苏宸啊9 小时前
linux线程池
linux
取谖慕12.10 小时前
Prometheus+Alertmanager+node_exporter+grafana高可用
linux·运维·grafana·prometheus
小此方10 小时前
Re:Linux系统篇(四十五)信号篇·三:一文讲透 Linux 信号保存机制:block,pending,handler三张表到底在做什么
linux·运维·服务器