本站资源仅用于学习交流,禁止商业运营与违法、侵权等非法行为;资源下载后请于 24 小时内删除,违规后果由使用者自行承担。
需求
1、需要查询md5和size的文件:
/www/wwwroot/game/pokemon/patch/3/res/version.plist
/www/wwwroot/game/pokemon/patch/194/res/version.plist
/www/wwwroot/game/pokemon/patch/194/src/app.defines.app_defines
/www/wwwroot/game/pokemon/patch/194/src/app.game_net
2、保存md5值和size大小值的json配置文件:
/mnt/pokemon/release/login/patch/cn/3.json
/mnt/pokemon/release/login/patch/cn/194.json
脚本
#!/bin/bash
# 脚本用于批量查询多个文件的MD5值和大小,并更新到对应的JSON配置文件中
# 根据路径自动判断应更新哪个JSON文件
# 定义需要查询的文件列表
FILES=(
"/www/wwwroot/game/pokemon/patch/3/res/version.plist"
"/www/wwwroot/game/pokemon/patch/194/res/version.plist"
"/www/wwwroot/game/pokemon/patch/194/src/app.defines.app_defines"
"/www/wwwroot/game/pokemon/patch/194/src/app.game_net"
)
# 检查所有文件是否存在
missing_files=()
for file_path in "${FILES[@]}"; do
if [ ! -f "$file_path" ]; then
missing_files+=("$file_path")
fi
done
if [ ${#missing_files[@]} -gt 0 ]; then
echo "错误: 以下文件不存在:"
for file in "${missing_files[@]}"; do
echo " - $file"
done
exit 1
fi
# 函数:根据文件路径获取对应的JSON文件
get_json_file() {
local file_path=$1
if [[ "$file_path" =~ /patch/194/ ]]; then
echo "/mnt/pokemon/release/login/patch/cn/194.json"
else
# 默认为3.json,可以根据需要扩展更多路径规则
echo "/mnt/pokemon/release/login/patch/cn/3.json"
fi
}
# 函数:获取文件的相对路径名(用于JSON中的name字段)
get_relative_name() {
local file_path=$1
# 移除基础路径,保留相对路径
# 根据实际JSON格式,我们只需要从patch开始的部分
if [[ "$file_path" =~ /patch/([0-9]+)/ ]]; then
patch_num="${BASH_REMATCH[1]}"
# 提取从patch目录开始的相对路径
relative_path=${file_path#*/patch/$patch_num/}
echo "$relative_path"
else
# 如果路径不匹配预期格式,使用原始方法
local relative_path=${file_path#/www/wwwroot/game/pokemon/}
echo "$relative_path"
fi
}
# 创建关联数组来存储每个JSON文件需要更新的文件信息
declare -A json_updates
declare -A json_backup_done
# 遍历所有文件并分类
for file_path in "${FILES[@]}"; do
# 计算MD5值和文件大小
md5_value=$(md5sum "$file_path" | awk '{print $1}')
file_size=$(stat -c %s "$file_path")
# 获取相对路径名
relative_name=$(get_relative_name "$file_path")
# 获取对应的JSON文件
json_file=$(get_json_file "$file_path")
echo "文件: $relative_name"
echo " 路径: $file_path"
echo " MD5值: $md5_value"
echo " 大小: $file_size 字节"
echo " 对应JSON: $json_file"
echo "---"
# 检查JSON文件是否存在
if [ ! -f "$json_file" ]; then
echo "错误: JSON文件 $json_file 不存在!"
exit 1
fi
# 备份JSON文件(仅备份一次)
if [ -z "${json_backup_done[$json_file]}" ]; then
cp "$json_file" "${json_file}.backup"
json_backup_done[$json_file]=1
echo "已备份 $json_file 到 ${json_file}.backup"
fi
# 存储更新信息
json_updates["$json_file|$relative_name|md5"]=$md5_value
json_updates["$json_file|$relative_name|size"]=$file_size
done
# 函数:使用更精确的方法更新JSON文件
update_with_precise_method() {
local json_file="$1"
# 为每个需要更新的文件执行更新
for key in "${!json_updates[@]}"; do
if [[ "$key" == "$json_file|"* ]]; then
parts=(${key//|/ })
if [ "${parts[0]}" = "$json_file" ] && [ "${parts[2]}" = "md5" ]; then
relative_name="${parts[1]}"
md5_val="${json_updates[$key]}"
size_val="${json_updates[${json_file}|${relative_name}|size]}"
echo " 更新文件: $relative_name"
echo " - MD5: $md5_val"
echo " - Size: $size_val"
# 使用一个更精确的方法:逐行处理JSON
temp_file=$(mktemp)
# 创建awk脚本来处理JSON更新
awk -v target_name="$relative_name" -v new_size="$size_val" -v new_md5="$md5_val" '
BEGIN {
in_target_object = 0
found_name = 0
}
{
line = $0
modified_line = line
# 检查是否是包含目标name的行
if (index(line, ""name":") > 0 && index(line, """ target_name """) > 0) {
found_name = 1
in_target_object = 1
}
# 如果在目标对象中,更新size和md5
if (in_target_object && index(line, ""size":") > 0) {
gsub(/"size":[[:space:]]*[0-9]+/, ""size": " new_size, modified_line)
}
if (in_target_object && index(line, ""md5":") > 0) {
gsub(/"md5":[[:space:]]*"[^"]*"/, ""md5": "" new_md5 """, modified_line)
}
# 如果遇到 } 并且之前找到了name,那么退出目标对象
if (in_target_object && index(line, "}") > 0) {
in_target_object = 0
found_name = 0
}
print modified_line
}' "$json_file" > "$temp_file"
# 替换原文件
mv "$temp_file" "$json_file"
fi
fi
done
}
# 处理每个JSON文件的更新
for json_file in "${!json_backup_done[@]}"; do
echo "更新 $json_file"
update_with_precise_method "$json_file"
done
# 验证修改后的内容
for json_file in "${!json_backup_done[@]}"; do
echo "验证 $json_file 中的相关条目:"
for key in "${!json_updates[@]}"; do
if [[ "$key" == "$json_file|"* ]]; then
parts=(${key//|/ })
if [ "${parts[0]}" = "$json_file" ] && [ "${parts[2]}" = "md5" ]; then
relative_name="${parts[1]}"
expected_md5="${json_updates[$key]}"
expected_size="${json_updates[${json_file}|${relative_name}|size]}"
echo " 文件: $relative_name"
# 在更新后的文件中查找该条目
if grep -q ""name": *"$relative_name"" "$json_file"; then
# 显示包含该文件名的对象
result=$(grep -A 5 -B 0 ""name": *"$relative_name"" "$json_file" | head -7)
echo "$result"
# 检查是否成功更新了MD5和Size
if echo "$result" | grep -q ""md5": *"$expected_md5""; then
echo " ✓ MD5值已成功更新"
else
echo " ✗ MD5值未更新,期望: $expected_md5"
fi
if echo "$result" | grep -q ""size": *$expected_size"; then
echo " ✓ Size值已成功更新"
else
echo " ✗ Size值未更新,期望: $expected_size"
fi
else
echo " (未找到此条目)"
fi
fi
fi
done
echo "---"
done
echo "所有文件信息更新完成!"
© 版权声明
1. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
2. 本站提供的所有资源仅供本地单机参考学习使用,不存在任何商业目的与商业用途,请大家不要用于商用!
3.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!若侵犯到您的权益,请联系站长邮箱:12225150@qq.com 我们会在24h小时之内进行删除处理。THE END


![【1.80御龍元素火龙[摸摸登陆器]】战神引擎WIN服务端+GM工具+充值后台+双端+架设教程-吾爱懒猫](https://www.52lanm.com/wp-content/uploads/2025/09/20250922070610486-Compress_Screenshot_20250922-063139.jpg)











暂无评论内容