linux中用zip结合脚本实现自动化打包归档,关键是让压缩行为可复用、可追溯、可维护,核心包括自动识别范围、智能排除干扰、带时间戳命名、支持简单配置。

Linux 中用 zip 结合脚本实现自动化打包归档,关键不是堆砌命令,而是让压缩行为可复用、可追溯、可维护。核心在于:自动识别范围、智能排除干扰、带时间戳命名、支持简单配置。
基础命令必须掌握
zip 是 Linux 下原生支持的跨平台归档工具,无需额外安装(如未安装可用 sudo apt install zip 补齐)。最常用组合是递归压缩 + 排除目录:
-
压缩当前目录全部内容(含子目录):
zip -r project.zip . -
排除 .git 和 node_modules:
zip -r project.zip . -x ".git/*" -x "node_modules/*" -
不保留空目录,减小包体积:加
-D参数,如zip -rD project.zip . -x ".git/*"
让压缩包自带时间标识
人工改名容易出错,用 date 命令动态生成时间戳即可:
- 标准格式示例:
project_$(date +%Y%m%d_%H%M%S).zip→ 如project_20260729_102035.zip - 若需包含毫秒或更精确时间,可用
$(date +%Y%m%d_%H%M%S%3N)(部分系统支持) - 建议统一用 24 小时制+秒级精度,避免歧义,也方便按字典序排序归档文件
写一个可复用的打包脚本
把上面逻辑封装成 shell 脚本,保存为 pack.sh,赋予执行权限 chmod +x pack.sh:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
#!/bin/bash
PROJECT_NAME="myapp"
EXCLUDES=(".git" "node_modules" "*.log" "__pycache__")
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ZIP_NAME="${PROJECT_NAME}_${TIMESTAMP}.zip"
<h1>构建 exclude 参数</h1><p>EXCLUDE_OPTS=""
for item in "${EXCLUDES[@]}"; do
EXCLUDE_OPTS="$EXCLUDE_OPTS -x \"$item/*\""
done</p><h1>执行压缩(-q 静默模式,-D 不保留空目录)</h1><p>zip -rq "$ZIP_NAME" . $EXCLUDE_OPTS</p><p>if [ $? -eq 0 ]; then
echo "✅ 打包完成:$ZIP_NAME ($(du -h "$ZIP_NAME" | cut -f1))"
else
echo "❌ 打包失败"
exit 1
fi
</p>
运行时直接执行 ./pack.sh 即可,无需传参,适合日常快速归档。
进阶:支持自定义项目名与排除规则
如果多个项目共用同一脚本,可改为接收参数:
- 调用方式:
./pack.sh frontend --exclude ".git,node_modules,build" - 脚本内用
getopts或简单位置参数解析,把$1当项目名,$2拆解为排除列表 - 也可读取同目录下的
.packignore文件(每行一个排除路径),比硬编码更灵活










