通用源码备份脚本

最终会压缩除了忽略的文件夹以外的所有项目文件包括目录,输出到/dist文件夹内(.zip格式),压缩包文件名前缀自定义,会自动拼接当前时间加入到文件名后缀防止文件重名冲突。

Python实现(推荐使用)

比起powershell脚本性能要好很多且简洁明了

import os
import zipfile

# 最终输出路径+压缩包文件名
output_zip = "KazeFrame_source.zip"

# 排除文件夹
exclude_folders = ["ui", "version", "tmp"]
# 排除文件,支持通配符
exclude_extensions = [".zip", ".exe", ".log"]


def zip_folder(output_path, exclude_folders, exclude_extensions):
    # 创建一个zip文件
    with zipfile.ZipFile(output_path, "w", zipfile.ZIP_DEFLATED) as zipf:
        # 遍历当前工作目录中的文件和子文件夹
        for foldername, subfolders, filenames in os.walk("."):
            # 从子文件夹列表中移除要排除的文件夹
            subfolders[:] = [sub for sub in subfolders if sub not in exclude_folders]
            for filename in filenames:
                # 构建文件的完整路径
                filepath = os.path.join(foldername, filename)
                # 获取文件相对于当前工作目录的相对路径
                relative_path = os.path.relpath(filepath, ".")
                # 检查文件是否在排除列表中(文件夹或后缀)
                if not any(
                    excl in relative_path for excl in exclude_folders
                ) and not any(filename.endswith(ext) for ext in exclude_extensions):
                    zipf.write(filepath, relative_path)


# 开始压缩
zip_folder(output_zip, exclude_folders, exclude_extensions)

简易版示例

只对于已知文件名和文件夹处理

# 输出的ZIP包路径和文件名
$ZIPFILE = "KazeFrame.zip"

# 要压缩的文件和文件夹路径
$PathsToCompress = @(
    ".\main.go"
    ".\.air.toml"
    ".\go.mod"
    ".\go.sum"
    ".\cmd"
    ".\internal"
    ".\pkg"
    ".\script"
)

# 压缩
Compress-Archive -Path $PathsToCompress -DestinationPath $ZIPFILE -Force

示例

  • 这里的ignoreList里面更改或自行添加删除为你要忽略压缩的文件夹,暂不支持忽略单文件,下方示例可以直接用来打包node项目(忽略的是node_modules和dist文件夹)。
# 自定义最终压缩文件的文件名前缀,建议是项目名称,简洁明了
$prefix = "KAZE"

# 自定义要忽略的文件夹列表
$ignoreList = @("node_modules", "dist")

# 获取当前目录下除去忽略列表的所有文件和文件夹
$itemsToCompress = Get-ChildItem -Path . | Where-Object {
    $_.GetType().Name -ne 'DirectoryInfo' -or
    $ignoreList -notcontains$_.Name
}

# 创建一个基于当前日期和时间的后缀
$suffix = Get-Date -Format "yyyyMMdd_HHmmss"

# 压缩包最终文件名
$destinationPath = ".\dist\$($prefix)_$suffix.zip"

# 拼接执行命令
$compress = @{
    Path            = $itemsToCompress.FullName
    CompressionLevel = "Fastest"
    DestinationPath = $destinationPath
}
Compress-Archive @compress
暂无评论

发送评论 编辑评论


				
上一篇
下一篇