#!/bin/bash # 基础配置 backup_dir="/mnt/mydata/backup" # 本地备份路径 data_dir="/mnt/mydata" # 要备份的目录 hostname=$(hostname) # 获取主机名 cloud_dir="backup/$hostname" # 云端存储路径,使用hostname区分 log_file="/var/log/bypy_backup.log" # 日志文件 # 日志函数 log_message() { echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$log_file" echo "$1" } # 创建本地备份目录 mkdir -p "$backup_dir" # 生成备份文件名 backup_file="backup-$hostname-$(date +'%Y-%m-%d').tar.gz" backup_path="$backup_dir/$backup_file" # 1. 首先创建新备份 log_message "开始创建备份文件..." tar -czf "$backup_path" \ --exclude="$data_dir/.Recycle_bin" \ --exclude="$backup_dir" \ "$data_dir" 2>/dev/null if [ $? -eq 0 ]; then log_message "备份文件创建成功: $backup_path" else log_message "备份文件创建失败" exit 1 fi # 2. 然后清理本地旧备份 num_local_backups=$(ls -l "$backup_dir" | grep ^- | grep 'backup-' | wc -l) if [ $num_local_backups -gt 1 ]; then oldest_local_backup=$(ls -t "$backup_dir" | grep 'backup-' | tail -1) rm "$backup_dir/$oldest_local_backup" log_message "删除本地旧备份: $oldest_local_backup" fi # 3. 最后同步到云端 log_message "确保云端目录存在..." /www/server/pyporject_evn/versions/3.13.0/bin/bypy mkdir "$cloud_dir" # 添加 -v 参数显示详细进度,并记录到日志 log_message "开始上传到云端..." /www/server/pyporject_evn/versions/3.13.0/bin/bypy -v syncup "$backup_dir" "$cloud_dir" 2>&1 | while IFS= read -r line; do # 更严格的过滤条件 if [[ $line =~ ^\[.*%.*MB\/.*MB.*ETA.* ]] || \ [[ $line =~ ^Done$ ]] || \ [[ $line == *"100%"* ]]; then echo "$line" echo "$(date +'%Y-%m-%d %H:%M:%S') - $line" >> "$log_file" fi done log_message "备份流程完成" # 显示当前云端备份列表 log_message "当前云端备份列表:" /www/server/pyporject_evn/versions/3.13.0/bin/bypy list "$cloud_dir" >> "$log_file"