如何基于sql文件指令批量重命名目录下的unl数据文件
解决方案
操作思路
- 从database.sql中提取所有规范的unl文件名,建立「表名→规范文件名」的映射关系,其中表名是规范文件名中
_之前的部分 - 遍历当前目录下所有现有
*.unl文件,提取文件名中.unl之前的部分作为匹配用的表名 - 根据表名匹配到对应的规范文件名,执行重命名操作
具体操作步骤
- 进入目标工作目录
cd /home/barmar/test.dir
- 新建重命名脚本
rename_unl.sh,内容如下:
#!/bin/bash # 声明关联数组存储 表名→规范文件名 映射 declare -A name_map # 从sql文件提取所有规范unl文件名,存入关联数组 while read -r correct_name; do table_name="${correct_name%%_*}" name_map["$table_name"]="$correct_name" done < <(grep -oP 'unload file name = \K.*?\.unl' database.sql) # 遍历现有unl文件执行重命名 for old_file in *.unl; do [ -e "$old_file" ] || continue old_table="${old_file%.unl}" if [ -n "${name_map[$old_table]}" ]; then mv -v "$old_file" "${name_map[$old_table]}" else echo "警告:未找到$old_file对应的规范文件名,已跳过" fi done
如果你用的是MacOS系统,默认grep不支持-P参数,可将上述grep那行替换为:
done < <(awk '/unload file name = /{print $5}' database.sql)
- 给脚本添加执行权限
chmod +x rename_unl.sh
注意事项:执行脚本前可以先把mv -v "$old_file" "${name_map[$old_table]}"替换为echo "mv $old_file ${name_map[$old_table]}",先执行预览重命名操作,确认所有映射正确后再改回原命令执行真实重命名,避免误操作。
内容的提问来源于stack exchange,提问作者TenEM
相关产品推荐
相关产品推荐

