feat: 支持自定义排除路径 EXCLUDE_PATHS

This commit is contained in:
2026-02-24 09:33:54 +08:00
parent aa1e95f296
commit ef303c7857

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
#=============================================================================== #===============================================================================
# VPS 快照备份脚本 v3.15 # VPS 快照备份脚本 v3.16
# 支持: Ubuntu, Debian, CentOS, Alpine # 支持: Ubuntu, Debian, CentOS, Alpine
# 功能: 智能识别应用 + Docker迁移 + 数据备份 + Telegram通知 # 功能: 智能识别应用 + Docker迁移 + 数据备份 + Telegram通知
#=============================================================================== #===============================================================================
@@ -19,7 +19,7 @@ LOG_FILE="/var/log/vps-snapshot.log"
print_banner() { print_banner() {
echo -e "${BLUE}" echo -e "${BLUE}"
echo "╔═══════════════════════════════════════════════════════════╗" echo "╔═══════════════════════════════════════════════════════════╗"
echo "║ VPS 快照备份脚本 v3.15 ║" echo "║ VPS 快照备份脚本 v3.16 ║"
echo "║ 智能识别 + Docker迁移 + 数据备份 ║" echo "║ 智能识别 + Docker迁移 + 数据备份 ║"
echo "╚═══════════════════════════════════════════════════════════╝" echo "╚═══════════════════════════════════════════════════════════╝"
echo -e "${NC}" echo -e "${NC}"
@@ -388,12 +388,21 @@ backup_app_data() {
local snap_dir="${LOCAL_DIR:-/var/snapshots}" local snap_dir="${LOCAL_DIR:-/var/snapshots}"
if [ -n "$backup_paths" ]; then if [ -n "$backup_paths" ]; then
log "📦 打包数据目录..." log "📦 打包数据目录..."
local exclude_args=""
if [ -n "$EXCLUDE_PATHS" ]; then
IFS=':' read -ra _ep <<< "$EXCLUDE_PATHS"
for _p in "${_ep[@]}"; do
[ -n "$_p" ] && exclude_args+=" --exclude=$_p"
done
log "排除路径: $EXCLUDE_PATHS"
fi
tar --exclude='*.sock' --exclude='*.pid' --exclude='node_modules' \ tar --exclude='*.sock' --exclude='*.pid' --exclude='node_modules' \
--exclude='.npm' --exclude='.cache' --exclude='__pycache__' \ --exclude='.npm' --exclude='.cache' --exclude='__pycache__' \
--exclude='*.log' --exclude='/var/log/*' \ --exclude='*.log' --exclude='/var/log/*' \
--exclude='/var/cache/*' --exclude='/tmp/*' \ --exclude='/var/cache/*' --exclude='/tmp/*' \
--exclude="$snap_dir" --exclude='/var/snapshots' \ --exclude="$snap_dir" --exclude='/var/snapshots' \
--exclude='/root/.cache' --exclude='/root/.local/share/Trash' \ --exclude='/root/.cache' --exclude='/root/.local/share/Trash' \
$exclude_args \
-czf "$output_dir/app-data.tar.gz" $backup_paths 2>/dev/null || true -czf "$output_dir/app-data.tar.gz" $backup_paths 2>/dev/null || true
local data_size=$(du -h "$output_dir/app-data.tar.gz" 2>/dev/null | cut -f1) local data_size=$(du -h "$output_dir/app-data.tar.gz" 2>/dev/null | cut -f1)
info "数据已保存: $output_dir/app-data.tar.gz ($data_size)" info "数据已保存: $output_dir/app-data.tar.gz ($data_size)"
@@ -1164,6 +1173,7 @@ REMOTE_DIR="$REMOTE_DIR"
REMOTE_KEEP_DAYS="$REMOTE_KEEP_DAYS" REMOTE_KEEP_DAYS="$REMOTE_KEEP_DAYS"
TG_BOT_TOKEN="$TG_BOT_TOKEN" TG_BOT_TOKEN="$TG_BOT_TOKEN"
TG_CHAT_ID="$TG_CHAT_ID" TG_CHAT_ID="$TG_CHAT_ID"
EXCLUDE_PATHS="$EXCLUDE_PATHS"
EOF EOF
chmod 600 "$CONFIG_FILE" chmod 600 "$CONFIG_FILE"
} }
@@ -1204,6 +1214,10 @@ do_setup() {
read -p "Bot Token: " TG_BOT_TOKEN read -p "Bot Token: " TG_BOT_TOKEN
[ -n "$TG_BOT_TOKEN" ] && read -p "Chat ID: " TG_CHAT_ID [ -n "$TG_BOT_TOKEN" ] && read -p "Chat ID: " TG_CHAT_ID
echo ""
info "排除路径 (可选,多个用冒号分隔,如 /data/downloads:/data/media)"
read -p "排除路径 [无]: " EXCLUDE_PATHS
save_config save_config
log "配置已保存到 $CONFIG_FILE" log "配置已保存到 $CONFIG_FILE"
} }