先做预检、备份,再替换;都只处理 *.lua 文件并只替换精确的标识符 LuaFnSetCopySceneData_Param(不会把类似 XLuaFnSetCopySceneData_ParamY 的部分误替换)。
在服务器上运行就行
先 — 预览哪些文件会被替换
在做任何修改前先看看影响范围:
grep -RIn --include='*.lua' 'LuaFnSetCopySceneData_Param' /home/tlbb/Public/Data/Script
解释:列出包含目标标识符的文件和行号,确认无误后再执行替换。
如果文件很多,想只列文件名:
grep -RIl --include='*.lua' 'LuaFnSetCopySceneData_Param' /home/tlbb/Public/Data/Script
一行批量替换(Perl),并为每个文件生成 .bak 备份
在确认预览无误后运行(会在每个修改过的 .lua 文件旁生成同名的 .lua.bak 备份):
# 在一个可用的 shell 下运行
find /home/tlbb/Public/Data/Script -type f -name '*.lua' -print0 \
| xargs -0 -n1 -P4 perl -0777 -i.bak -pe 's/\bLuaFnSetCopySceneData_Param\b/LuaFnXueWuTest/g'
说明:
find ... -print0 | xargs -0:安全处理空格/特殊字符文件名。
perl -0777 -i.bak -pe 's/\bOLD\b/NEW/g':-0777 使 perl 把文件当作整体读,\b 是单词边界,保证只替换完整标识符;-i.bak 会把原文件保存为 .bak。
-P4 让 xargs 并行 4 个进程,加速(可删掉 -P4 改为串行)。
回滚(恢复备份)(如果发现问题):
find /home/tlbb/Public/Data/Script -type f -name '*.lua.bak' -print0 \
| while IFS= read -r -d '' bak; do
orig="${bak%.bak}"
mv -f "$bak" "$orig"
done
检查某个文件替换差异(举例):
diff -u path/to/file.lua.bak path/to/file.lua | less
|