2026-06-05 20:15:30 +08:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
2026-06-12 18:29:08 +08:00
|
|
|
|
REMOTE_DIR="/data/project/app-api"
|
2026-06-08 14:52:23 +08:00
|
|
|
|
|
2026-06-12 15:50:01 +08:00
|
|
|
|
DEFAULT_PATHS=(
|
|
|
|
|
|
./cmd/
|
|
|
|
|
|
./internal/
|
2026-06-12 18:29:08 +08:00
|
|
|
|
./pkg/
|
|
|
|
|
|
./docs/
|
2026-06-12 15:50:01 +08:00
|
|
|
|
./go.mod
|
|
|
|
|
|
./go.sum
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
show_help() {
|
|
|
|
|
|
cat <<'EOF'
|
|
|
|
|
|
用法: upload.sh [选项] [服务器] [路径...]
|
|
|
|
|
|
|
|
|
|
|
|
将本地代码同步到远程服务器(rsync)。
|
|
|
|
|
|
|
|
|
|
|
|
选项:
|
|
|
|
|
|
-n 虚拟执行,不实际传输或删除远程文件
|
|
|
|
|
|
-h, --help 显示此帮助信息
|
|
|
|
|
|
|
|
|
|
|
|
服务器:
|
|
|
|
|
|
api1 仅上传到 api1 (luxsin-api1)
|
|
|
|
|
|
api2 仅上传到 api2 (luxsin-api2)
|
|
|
|
|
|
(省略) 同时上传到 api1 和 api2
|
|
|
|
|
|
|
|
|
|
|
|
路径:
|
|
|
|
|
|
指定要同步的文件或目录,可传多个。
|
2026-06-12 18:29:08 +08:00
|
|
|
|
省略时使用默认路径: cmd/ internal/ pkg/ docs/ go.mod go.sum
|
|
|
|
|
|
|
|
|
|
|
|
注意: Dockerfile 和 docker-compose.yml 未包含在默认路径中(如需同步请手动指定)
|
2026-06-12 15:50:01 +08:00
|
|
|
|
|
|
|
|
|
|
示例:
|
|
|
|
|
|
upload.sh 同步默认路径到 api1 和 api2
|
|
|
|
|
|
upload.sh api1 同步默认路径到 api1
|
|
|
|
|
|
upload.sh api2 ./internal 同步 internal/ 到 api2
|
2026-06-12 18:29:08 +08:00
|
|
|
|
upload.sh api1 Dockerfile 单独同步 Dockerfile 到 api1
|
2026-06-12 15:50:01 +08:00
|
|
|
|
upload.sh -n 虚拟执行,预览同步到 api1 和 api2
|
|
|
|
|
|
upload.sh -n api1 ./internal 虚拟执行,预览同步到 api1
|
|
|
|
|
|
EOF
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
remote_host_for() {
|
|
|
|
|
|
case "$1" in
|
|
|
|
|
|
api1) echo "luxsin-api1" ;;
|
|
|
|
|
|
api2) echo "luxsin-api2" ;;
|
|
|
|
|
|
*)
|
|
|
|
|
|
echo "未知服务器: $1(可选: api1, api2)" >&2
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
upload_to() {
|
|
|
|
|
|
local server="$1"
|
2026-06-08 14:52:23 +08:00
|
|
|
|
shift
|
2026-06-12 15:50:01 +08:00
|
|
|
|
local paths=("$@")
|
|
|
|
|
|
local remote_host
|
|
|
|
|
|
remote_host="$(remote_host_for "$server")"
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$DRY_RUN" = true ]; then
|
|
|
|
|
|
echo "虚拟上传到 ${server} (${remote_host}) ..."
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "上传到 ${server} (${remote_host}) ..."
|
|
|
|
|
|
fi
|
2026-06-08 14:52:23 +08:00
|
|
|
|
|
2026-06-12 15:50:01 +08:00
|
|
|
|
local rsync_opts=(-avz --progress)
|
|
|
|
|
|
if [ "$DRY_RUN" = true ]; then
|
|
|
|
|
|
rsync_opts+=(-n)
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
local item rel remote_path
|
|
|
|
|
|
for item in "${paths[@]}"; do
|
|
|
|
|
|
rel="${item#./}"
|
2026-06-12 18:29:08 +08:00
|
|
|
|
rel="${rel%/}" # 剥离尾部斜杠,避免拼接时出现双斜杠
|
|
|
|
|
|
remote_path="${REMOTE_DIR}/${rel}"
|
2026-06-12 15:50:01 +08:00
|
|
|
|
|
|
|
|
|
|
if [[ -d "$item" ]]; then
|
|
|
|
|
|
echo " 同步目录: $item -> ${remote_host}:${remote_path}/"
|
|
|
|
|
|
rsync "${rsync_opts[@]}" --delete "${item}/" "${remote_host}:${remote_path}/"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo " 同步文件: $item -> ${remote_host}:${remote_path}"
|
|
|
|
|
|
rsync "${rsync_opts[@]}" "$item" "${remote_host}:${remote_path}"
|
|
|
|
|
|
fi
|
|
|
|
|
|
done
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DRY_RUN=false
|
|
|
|
|
|
ARGS=()
|
|
|
|
|
|
for arg in "$@"; do
|
|
|
|
|
|
case "$arg" in
|
|
|
|
|
|
-n)
|
|
|
|
|
|
DRY_RUN=true
|
|
|
|
|
|
;;
|
|
|
|
|
|
-h|--help)
|
|
|
|
|
|
show_help
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
;;
|
|
|
|
|
|
*)
|
|
|
|
|
|
ARGS+=("$arg")
|
|
|
|
|
|
;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
SERVERS=()
|
|
|
|
|
|
if [ ${#ARGS[@]} -gt 0 ] && { [ "${ARGS[0]}" = "api1" ] || [ "${ARGS[0]}" = "api2" ]; }; then
|
|
|
|
|
|
SERVERS=("${ARGS[0]}")
|
|
|
|
|
|
ARGS=("${ARGS[@]:1}")
|
2026-06-05 20:15:30 +08:00
|
|
|
|
else
|
2026-06-12 15:50:01 +08:00
|
|
|
|
SERVERS=(api1 api2)
|
2026-06-05 20:15:30 +08:00
|
|
|
|
fi
|
|
|
|
|
|
|
2026-06-12 15:50:01 +08:00
|
|
|
|
if [ ${#ARGS[@]} -eq 0 ]; then
|
|
|
|
|
|
PATHS=("${DEFAULT_PATHS[@]}")
|
|
|
|
|
|
else
|
|
|
|
|
|
PATHS=("${ARGS[@]}")
|
|
|
|
|
|
fi
|
2026-06-11 11:12:19 +08:00
|
|
|
|
|
2026-06-12 15:50:01 +08:00
|
|
|
|
for server in "${SERVERS[@]}"; do
|
|
|
|
|
|
upload_to "$server" "${PATHS[@]}"
|
|
|
|
|
|
echo
|
2026-06-11 11:12:19 +08:00
|
|
|
|
done
|
|
|
|
|
|
|
2026-06-12 15:50:01 +08:00
|
|
|
|
echo "完成。"
|