AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning
This commit is contained in:
136
archive/inactive-skills/openclaw-toolbox/scripts/backup.sh
Normal file
136
archive/inactive-skills/openclaw-toolbox/scripts/backup.sh
Normal file
@@ -0,0 +1,136 @@
|
||||
#!/bin/bash
|
||||
|
||||
# OpenClaw 自动备份脚本
|
||||
# 使用方法: ./backup.sh [commit message]
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKUP_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
||||
GIT_REMOTE="origin"
|
||||
|
||||
NO_PUSH=0
|
||||
DRY_RUN=0
|
||||
PULL_BEFORE=0
|
||||
COMMIT_MSG=""
|
||||
|
||||
usage() {
|
||||
cat <<'USAGE'
|
||||
Usage:
|
||||
backup.sh [message]
|
||||
|
||||
Options:
|
||||
--pull 备份前先 git pull --rebase(要求工作区干净)
|
||||
--no-push 只提交,不推送
|
||||
--dry-run 仅显示变更,不提交
|
||||
-m, --message 提交信息
|
||||
-h, --help 显示帮助
|
||||
|
||||
USAGE
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--pull) PULL_BEFORE=1 ;;
|
||||
--no-push) NO_PUSH=1 ;;
|
||||
--dry-run) DRY_RUN=1 ;;
|
||||
-m|--message)
|
||||
shift
|
||||
COMMIT_MSG="$1"
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
if [ -z "$COMMIT_MSG" ]; then
|
||||
COMMIT_MSG="$1"
|
||||
else
|
||||
COMMIT_MSG="$COMMIT_MSG $1"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
parse_args "$@"
|
||||
|
||||
cd "$BACKUP_DIR"
|
||||
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "✗ 当前目录不是 Git 仓库: $BACKUP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git remote get-url "$GIT_REMOTE" >/dev/null 2>&1; then
|
||||
GIT_REMOTE="$(git remote | head -n1)"
|
||||
fi
|
||||
if [ -z "$GIT_REMOTE" ]; then
|
||||
echo "⚠️ 未找到 Git 远端"
|
||||
fi
|
||||
|
||||
REPO_URL=""
|
||||
if [ -n "$GIT_REMOTE" ]; then
|
||||
REPO_URL="$(git remote get-url "$GIT_REMOTE" 2>/dev/null || true)"
|
||||
fi
|
||||
CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)"
|
||||
|
||||
echo "🔄 开始备份 OpenClaw 配置..."
|
||||
|
||||
if [ "$PULL_BEFORE" -eq 1 ]; then
|
||||
if git diff --quiet && git diff --staged --quiet; then
|
||||
echo "⬇️ 拉取最新代码..."
|
||||
git pull --rebase || echo "⚠️ git pull 失败,请手动处理"
|
||||
else
|
||||
echo "⚠️ 工作区有未提交变更,跳过 git pull"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 检查是否有更改
|
||||
if [ -z "$(git status --porcelain)" ]; then
|
||||
echo "✅ 没有需要备份的更改"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$DRY_RUN" -eq 1 ]; then
|
||||
echo "📄 变更预览:"
|
||||
git status --short
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 默认提交信息
|
||||
if [ -z "$COMMIT_MSG" ]; then
|
||||
COMMIT_MSG="Backup: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
fi
|
||||
|
||||
echo "➕ 添加更改到暂存区..."
|
||||
git add -A
|
||||
|
||||
echo "💾 提交更改..."
|
||||
git commit -m "$COMMIT_MSG"
|
||||
|
||||
if [ "$NO_PUSH" -eq 0 ]; then
|
||||
echo "☁️ 推送到 GitHub..."
|
||||
if [ -n "$GIT_REMOTE" ] && [ -n "$CURRENT_BRANCH" ]; then
|
||||
if ! git push "$GIT_REMOTE" "$CURRENT_BRANCH"; then
|
||||
echo "✗ 推送失败:可能需要先 git pull --rebase"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if ! git push; then
|
||||
echo "✗ 推送失败:请检查 Git 远端或设置上游分支"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 跳过推送(--no-push)"
|
||||
fi
|
||||
|
||||
echo "✅ 备份完成!"
|
||||
echo "📦 仓库地址: ${REPO_URL:-N/A}"
|
||||
if [ -n "$CURRENT_BRANCH" ]; then
|
||||
echo "🌿 分支: ${GIT_REMOTE:-?}/${CURRENT_BRANCH}"
|
||||
fi
|
||||
echo "📝 提交信息: $COMMIT_MSG"
|
||||
Reference in New Issue
Block a user