首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从命令行查找并运行SQL脚本

问从命令行查找并运行SQL脚本
EN

Stack Overflow用户
提问于 2020-12-01 17:34:26
回答 2查看 97关注 0票数 0

我正在学习如何在linux上使用终端。我正在尝试从命令行查找并运行SQL脚本。

到目前为止,我用以下命令从终端运行了一个SQL脚本:

代码语言:javascript
复制
mysql -u username -p dbname < script.sql

还可以找到我想要的文件:

代码语言:javascript
复制
find /path/to/migrations/directory | sort -r | head -1

(此find命令在路径中查找最新的sql脚本)

但我不知道如何将它们组合在一起:

代码语言:javascript
复制
mysql -u username -p dbname < find /path/to/migrations/directory | sort -r | head -1

基本上,我尝试做的是将find的结果作为sql脚本执行。任何帮助都将不胜感激,谢谢:)

EN

回答 2

Stack Overflow用户

发布于 2020-12-01 17:50:31

为了展开file命令,您需要使用$(),因此命令将为:

代码语言:javascript
复制
mysql -u username -p dbname < "$(find /path/to/migrations/directory | sort -r | head -1)"

使用引号处理与扩展中的空格相关的任何问题。

票数 0
EN

Stack Overflow用户

发布于 2020-12-01 18:00:56

从字面上看,您在这里提出的问题是

代码语言:javascript
复制
find /path/to/migrations/directory | sort -r | head -1 | mysql -u username -p dbname

但是,如果您要查找的SQL脚本不是目录中或目录下的第一个文件(在shell的当前排序序列中),或者如果directory的子目录在所需脚本之前按排序顺序出现,那么您的方法就会失败。

如果directory下面有多个文件,但只有一个是sql文件,则可以将其写为

代码语言:javascript
复制
find /path/to/migrations/directory -type f -name '*.sql' -exec mysql -u username -p dbname {} \;

type f确保find不生成目录名,-name子句将选择限制为以.sql结尾的名称

但是,我仍然会添加一些安全措施,以避免拾取不适当的SQL脚本。例如,您可以首先收集directory下的所有SQL文件,如果总数大于1,则不运行它,而是在stderr上发出一条消息,说“无法明确地找到sql文件”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65087947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档