【工具】zipany 跨平台目录压缩打包工具
原创 酒零 2026-06-22 14:00 湖南

zipany 基于 Go 语言的跨平台目录打包压缩工具,支持 tar.gz 格式,提供灵活的文件过滤规则和预设配置。

0x00 前言
免责声明:继续阅读文章视为您已同意[NOVASEC免责声明].
注:本文属于推荐系列文章,所推荐内容并非全部由本团队开源实现。文章旨在分享各类优质项目,提升其关注度与影响力,文中观点仅代表作者个人看法。若您有更合适的替代项目,欢迎在留言区推荐分享,共同推荐优质项目资源。
zipany
一个基于 Go 语言的跨平台目录打包压缩工具,支持 tar.gz 格式,提供灵活的文件过滤规则和预设配置。
特性
✅ 跨平台支持 - Windows、Linux、macOS 全平台兼容
✅ tar.gz 格式 - 通用格式,解压速度快,兼容性好
✅ 配置文件管理 - YAML 配置文件,支持黑白名单过滤规则
✅ 预设配置 - 内置多种打包预设,支持自定义预设
✅ 安全保护 - 自动跳过软链接,防止路径穿越攻击
✅ 智能过滤 - 支持按文件扩展名、目录名过滤
✅ 空目录跳过 - 支持跳过无用的空目录
✅ 结果校验 - 打包完成后自动校验文件并输出统计信息
安装
从源码编译
git clone https://github.com/winezer0/zipany.gitcd zipany go build -o zipany .
快速开始
基本用法
# 打包目录(使用默认配置,自动生成输出文件名)zipany -s ./project# 打包目录(指定输出文件)zipany -s ./project -o ./project.tar.gz# 使用配置文件zipany -s ./project -o ./project.tar.gz -c config.yaml# 使用 PHP 预设zipany -s ./project -o ./project.tar.gz -p php# 使用命令行扩展名过滤 白名单模式打包zipany -s ./project -o ./project.tar.gz -p "ext:php,tpl,vue" -w
分片压缩
因为 gzip 的压缩字典是跨文件的,要直接生成完全独立的可单独解压的多个 .tar.gz 较为复杂,且在很多场景下解压并不兼容。
流级别分片可以将输出的压缩包自动截断为 .part1 , .part2 等文件,解压前只需要用 cat archive.tar.gz.part* > archive.tar.gz 合并即可。
# 生成普通不分片压缩包
zipany -s /path/to/source -o output.tar.gz
# 将压缩包限制在最大 100MB,如果超出则会生成 output.tar.gz.part1, output.tar.gz.part2 ...
zipany -s /path/to/source -o output.tar.gz -S 100解压分片压缩包方法(系统内置):
Windows 命令行:
copy /b output.tar.gz.part* output.tar.gz
tar -xzf output.tar.gzLinux/Mac 命令行:
cat output.tar.gz.part* > output.tar.gz
tar -xzf output.tar.gz生成默认配置文件
zipany --gen这将生成一个 zipany.yaml 配置文件,包含默认过滤规则和预设配置。
列出所有预设
zipany --list这将输出当前配置文件中所有可用的预设名称。
命令行参数
参数 | 简写 | 说明 |
|---|---|---|
--source | -s | 源目录路径(必需) |
--output | -o | 输出压缩包路径(可选,默认自动生成) |
--config | -c | 配置文件路径(可选) |
--preset | -p | 预设配置名称(默认:common),支持 |
--gen | 生成默认配置文件到 | |
--list | 列出配置文件中的所有预设 | |
--white | -w | 白名单模式:仅保留预设中的扩展名列表 |
--se | 跳过空目录 | |
--no-bar | -n | 不显示进度条 |
--version | -v | 输出版本信息 |
--lf | 日志文件路径(默认:不输出到文件) | |
--ll | 日志级别(debug/info/warn/error,默认:info) | |
--cf | 控制台日志格式(T L C M F 组合或 off|null 禁用,默认:M) |
配置文件
配置文件结构
# 预设配置示例presets: php: description: "常见的 PHP 保存方案"stored_ext: - php - tpl - vueignore_ext: - jpg - png - mp3 - mp4ignore_dir: - ".cache" - "tmp" - "node_modules" - "vendor"
配置说明
白名单模式 (stored_ext)
-w 启用白名单模式
只保留指定扩展名的文件
其他所有文件都会被排除
黑名单模式 (ignore_ext, ignore_dir)
默认使用黑名单模式
排除
ignore_ext中指定的文件扩展名排除
ignore_dir中指定的目录名其他文件和目录都会被包含
预设配置
程序内置了 多种预设, 示例 php 预设,适用于 PHP 项目打包:
- 保留文件
:
.php,.tpl,.vue - 忽略文件
: 图片 (jpg, jpeg, png, bmp, gif, webp)、音视频 (mp3, mp4, avi, mov, wmv)、压缩包 (zip, rar, 7z)
- 忽略目录
:
.cache,.temp,tmp,temp,.git,node_modules,vendor
使用示例
示例 1: 打包 PHP 项目
# 使用 PHP 预设打包zipany -s /var/www/myapp -o /backup/myapp.tar.gz -p php
输出:
使用配置文件:config.yaml
源目录:/var/www/myapp
输出文件:/backup/myapp.tar.gz
使用预设:php
过滤规则已启用
开始打包...
打包完成!
输出文件:/backup/myapp.tar.gz
文件大小:2.35 MB
文件数量:156
目录数量:23示例 2: 使用自定义配置文件
# 生成配置文件zipany --gen# 编辑 zipany.yaml,添加自定义规则# 使用自定义配置打包zipany -s ./src -o ./output.tar.gz -c myconfig.yaml
示例 3: 打包时跳过空目录
# 跳过空目录zipany -s ./project -o ./project.tar.gz --se
构建发布版本
# WindowsCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o zipany.exe .# LinuxCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o zipany .# macOSCGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o zipany .
常见问题
Q: 如何排除特定大小的文件?
A: 当前版本不支持按文件大小过滤,可以通过 Issue 提出此需求。
Q: 支持 zip 格式吗?
A: 当前仅支持 tar.gz 格式,未来版本可能会添加其他格式支持。
Q: 配置文件放在哪里?
A: 程序会在当前工作目录和/.config/目录,自动查找 zipany.yaml文件, 未找到配置文件路径时默认使用内置配置文件,也可以使用 -c 参数指定路径。
