(新)服务器IP地址:172.26.70.184 (旧)数据服务器IP地址:172.26.70.169 minio版本:minio version RELEASE.2022-05-26T05-48-41Z silo版本:minio version RELEASE.2026-08-04T00-00-00Z
set -o pipefail # ========== 配置区 ========== SOURCE="/data/tmp/rwvp" TARGET="silo/rwvp" MCLI="/usr/local/bin/mcli" # 日志文件路径(默认为脚本所在目录下的 upload.log) LOG_DIR="$(cd "$(dirname "$0")" && pwd)/logs" LOG_FILE="$LOG_DIR/upload_$(date +%Y%m%d).log" # 按天分割,或使用固定名称 # 如果想用固定名称,可改为 LOG_FILE="$LOG_DIR/upload.log" # ========== 初始化日志目录 ========== if ! mkdir -p "$LOG_DIR" 2>/dev/null; then echo "警告:无法创建日志目录 $LOG_DIR,将日志输出到标准错误。" >&2 LOG_FILE="/dev/stderr" fi # ========== 日志函数 ========== log_message() { local status="$1" local file_path="$2" local reason="${3:-}" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") if [ -z "$reason" ]; then echo "$timestamp | $status | $file_path" >> "$LOG_FILE" 2>/dev/null else echo "$timestamp | $status | $file_path | $reason" >> "$LOG_FILE" 2>/dev/null fi # 如果日志写入失败,则输出到标准错误 if [ $? -ne 0 ]; then echo "错误:无法写入日志文件 $LOG_FILE" >&2 fi }
log_success() { log_message "SUCCESS" "$1" }
log_failure() { log_message "FAILED" "$1" "$2" } # ========== 环境检查 ========== if [ ! -d "$SOURCE" ]; then echo "错误:源目录 $SOURCE 不存在。" >&2 log_failure "SOURCE_DIR" "Directory $SOURCE does not exist" exit 1 fi
if [ ! -x "$MCLI" ]; then echo "错误:$MCLI 未找到或不可执行。" >&2 log_failure "MCLI" "Command $MCLI not found or not executable" exit 1 fi # ========== 执行上传与清理 ========== cd "$SOURCE" || exit 1 failure_count=0
while IFS= read -r -d '' file; do rel_path="${file#./}" [ -z "$rel_path" ] && continue
echo "正在上传: $rel_path" if "$MCLI" cp "$SOURCE/$rel_path" "$TARGET/$rel_path" >/dev/null 2>&1; then # 上传成功,尝试删除本地文件 if rm "$SOURCE/$rel_path"; then echo "已上传并删除: $rel_path" log_success "$rel_path" else echo "错误:删除本地文件失败: $rel_path" >&2 log_failure "$rel_path" "Upload succeeded but local deletion failed" failure_count=$((failure_count + 1)) fi else echo "错误:上传失败: $rel_path" >&2 log_failure "$rel_path" "Upload failed (mcli cp returned non-zero)" failure_count=$((failure_count + 1)) fi done < <(find . -type f -print0) # ========== 汇总结果 ========== if [ $failure_count -eq 0 ]; then echo "所有文件上传并清理成功。" log_success "ALL" "All files processed successfully" exit 0 else echo "有 $failure_count 个文件上传或删除失败,请检查日志 $LOG_FILE" >&2 log_failure "SUMMARY" "Total failures: $failure_count" exit 1 fi