我正在学习在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文件"。