#!/bin/bash # ============================================================ # 更新 storage_blob 表的文件大小字段 # 扫描文件目录获取实际文件大小,生成更新SQL # ============================================================ # 文件存储根目录(根据实际路径修改) FILE_ROOT="/javaWork/product-inventory-management/file/prod" # 输出SQL文件名 OUTPUT_SQL="update_blob_file_size.sql" echo "开始扫描目录: $FILE_ROOT" echo "-- 更新文件大小 SQL" > "$OUTPUT_SQL" echo "-- 生成时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$OUTPUT_SQL" echo "" >> "$OUTPUT_SQL" # 统计计数 count=0 # 扫描目录下所有文件并生成更新SQL find "$FILE_ROOT" -type f | while read filepath; do # 获取文件大小(字节) filesize=$(stat -c%s "$filepath" 2>/dev/null || echo "0") # 获取文件名(最后一段路径) filename=$(basename "$filepath") # 转义文件名中的单引号(SQL语法要求) filename_escaped=$(echo "$filename" | sed "s/'/''/g") # 生成更新SQL echo "UPDATE storage_blob SET byte_size = $filesize WHERE uid_filename = '$filename_escaped';" >> "$OUTPUT_SQL" # 计数(子shell中无法传递,仅用于显示进度) echo "已处理: $filename ($filesize bytes)" done echo "" echo "==========================================" echo "SQL文件已生成: $OUTPUT_SQL" echo "==========================================" echo "" echo "执行方法:" echo " mysql -u用户名 -p密码 数据库名 < $OUTPUT_SQL" echo "" echo "或者先检查SQL内容:" echo " cat $OUTPUT_SQL"