1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #!/bin/bash # 脚本功能:读取外部列表备份文件/目录,并记录详细日志
ip=$(hostname -I | awk '{print $1}') LIST_FILE="backup_list.txt" DEST_DIR="/home/backup/$ip/$(date +%Y%m%d)_bak" LOG_DIR="/var/log/backuplogs" LOG_FILE="${LOG_DIR}/backup_$(date +%Y%m%d).log"
#切换到脚本执行目录 cd /usr/local/bin
# 创建日志目录 mkdir -p "$LOG_DIR" "$DEST_DIR"
# 日志记录函数 log() { local timestamp=$(date +"%Y-%m-%d %H:%M:%S") echo "[${timestamp}] $1" | tee -a "$LOG_FILE" }
# 主备份逻辑 log "===== 开始备份任务 =====" log "备份目标目录: $DEST_DIR"
while IFS= read -r source_path; do # 跳过空行和注释行 [[ -z "$source_path" || "$source_path" == \#* ]] && continue
# 检查源路径是否存在 if [ ! -e "$source_path" ]; then log "警告: 路径不存在 [跳过] -> $source_path" continue fi # 生成目标路径 relative_path=$(realpath --relative-to="$(dirname "$source_path")" "$source_path") target_path="${DEST_DIR}/${relative_path}"
# 执行复制操作 if cp -rv --preserve=all "$source_path" "$target_path" 2>&1 | tee -a "$LOG_FILE"; then log "成功: 备份完成 -> $source_path" else log "错误: 备份失败 -> $source_path" fi
done < "$LIST_FILE"
log "===== 备份任务结束 =====" echo "操作日志已保存至: $LOG_FILE"
|