You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:44:06