mysql - 从命令行查找并运行 SQL 脚本
问题描述
我正在学习在 linux 中使用终端。我正在尝试从命令行查找并运行 SQL 脚本。
到目前为止,我设法从终端运行 SQL 脚本:
mysql -u username -p dbname < script.sql
并找到我想要的文件:
find /path/to/migrations/directory | sort -r | head -1
(此find
命令在路径中查找最新的 sql 脚本)
但我不知道如何将它们组合起来:
mysql -u username -p dbname < find /path/to/migrations/directory | sort -r | head -1
基本上,我想做的是执行find
as sql 脚本的结果。任何帮助将不胜感激,谢谢:)
解决方案
从字面上理解你在这里问的问题,那就是
find /path/to/migrations/directory | sort -r | head -1 | mysql -u username -p dbname
但是,如果您要查找的 SQL 脚本不是您的目录中或目录下的第一个文件(在您的 shell 的当前整理顺序中),或者如果directory
在您想要的之前有子目录按排序顺序排列,那么您的方法就会中断脚本。
如果下面有几个文件directory
,但只有一个是sql文件,可以写成
find /path/to/migrations/directory -type f -name '*.sql' -exec mysql -u username -p dbname {} \;
type f
确保find
不生成目录名称,并且该子句-name
将选择限制为以.sql结尾的名称
但仍然如此,我会添加一些安全措施以避免选择不合适的 SQL 脚本。比如你可以先收集下面所有的SQL文件directory
,如果总数大于1,不运行它,而是在stderr上发出一条消息,说“找不到明确的sql文件”。
推荐阅读
- sql - 如何在 aws athena 中的 struct<$oid:string> 处查询
- sql - sql查询排除非空列
- c# - SqlDateTime 溢出然后 Sql 列类型为 ... datetime2(7)
- javascript - chart.js 未在 x 轴上显示所有值
- c# - 在属性类中使用字典
- java - 如何配置 Jenkins 节点以使用 OpenWebStart 而不是 Java Web Start
- c# - “当前上下文中不存在名称‘n’”。如何在其上下文之外引用类型?
- python - 在 Python 中总是有一个守护线程
- flutter - Flutter - 如何保存录制的音频文件?
- r - 尝试在 R #2 中安装 Rling 包时出错