2026-06-29 e15efbe0bcb1b5e5ea21f0c937635746a3143321
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
#!/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"