首页 > 解决方案 > 从命令行查找并运行 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

基本上,我想做的是执行findas sql 脚本的结果。任何帮助将不胜感激,谢谢:)

标签: mysqlbashubuntufind

解决方案


从字面上理解你在这里问的问题,那就是

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文件”。


推荐阅读