我正在学习如何在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脚本执行。任何帮助都将不胜感激,谢谢:)
发布于 2020-12-01 17:50:31
为了展开file命令,您需要使用$(),因此命令将为:
mysql -u username -p dbname < "$(find /path/to/migrations/directory | sort -r | head -1)"使用引号处理与扩展中的空格相关的任何问题。
发布于 2020-12-01 18:00:56
从字面上看,您在这里提出的问题是
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文件”。
https://stackoverflow.com/questions/65087947
复制相似问题