如何用Bash脚本拆分合并SQL文件,区分含ADM命名的文件
解决SQL文件分组合并的Bash脚本方案
我明白你的需求啦——要把普通SQL文件合并到all.sql,而名称含"ADM"的SQL文件单独合并到all_ADM.sql,这样后续就能用不同的数据库账号密码分别导入。咱们可以优化你的现有脚本,用更安全可靠的方式实现这个需求:
完善后的Bash脚本
# 先清空目标文件(避免重复追加旧内容) > all.sql > all_ADM.sql # 遍历当前目录下的所有.sql文件 for filename in *.sql; do # 跳过目标合并文件本身,防止循环中把已合并的内容重复加入 if [[ "$filename" == "all.sql" || "$filename" == "all_ADM.sql" ]]; then continue fi # 判断文件名是否包含"ADM"关键字 if [[ "$filename" == *ADM* ]]; then cat "$filename" >> all_ADM.sql else cat "$filename" >> all.sql fi done
关键优化点说明
- 清空目标文件:用
> all.sql和> all_ADM.sql在脚本开头清空文件,避免每次运行脚本时重复追加旧内容。 - 跳过目标文件:增加判断逻辑跳过
all.sql和all_ADM.sql,防止循环中误把已经合并好的文件再次加入,导致内容冗余。 - 安全的文件名处理:把
$filename用双引号包裹("$filename"),如果你的SQL文件名包含空格或特殊字符,这样能避免脚本解析出错。 - 更可靠的遍历方式:直接用
*.sql遍历文件,比ls *.sql更安全,因为ls的输出遇到特殊字符时可能会引发意外问题。
额外建议
如果你的SQL文件存在依赖关系(比如某张表的创建脚本要先于插入脚本执行),可以给文件名添加数字前缀(比如01_create_table.sql、02_insert_data.sql),这样遍历的时候会按顺序处理,避免因执行顺序错误导致的SQL报错。
内容的提问来源于stack exchange,提问作者Alessandro Melo
相关产品推荐
相关产品推荐

