【工具】zipany 跨平台目录压缩打包工具

· 2026-06-22 14:00 · 3 阅读

原创 酒零 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.gz

Linux/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),支持 ext:xxx,xxx 或 dir:xxx,xxx 格式

--gen

生成默认配置文件到 <ConfigPath>

--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_extignore_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.temptmptemp.gitnode_modulesvendor

使用示例

示例 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 参数指定路径。

跳转微信打开