从命令行查找并运行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的结果作为sql脚本执行。任何帮助都将不胜感激,谢谢:(

为了扩展文件命令,您需要使用$((,因此命令将为:

mysql -u username -p dbname < "$(find /path/to/migrations/directory | sort -r | head -1)"

使用引号来处理资料片中与空格相关的任何问题。

按照您在这里的要求,它将是

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脚本。例如,您可以首先收集directory以下的所有SQL文件,如果总数大于1,则不运行它,而是在stderr上发出一条消息,说";找不到明确的sql文件"。

相关内容

  • 没有找到相关文章

最新更新