递归搜索所有带有 .sql 扩展名的文件并将它们作为参数传递给 mysql

递归搜索所有带有 .sql 扩展名的文件并将它们作为参数传递给 mysql

鉴于:

包含带.sql扩展名的文件的目录树。

必需

以递归方式查找所有文件并将找到的文件逐个传递给mysql客户端,如下所示:

mysql < ./dir/subdir/subsubdir/schema.sql

我的微薄之力

find . -name '*.sql' | xargs mysql

结果是:

ERROR 1049 (42000): Unknown database './dir/subdir/subsubdir/schema.sql'

问题

怎样做才正确?

谢谢!

答案1

我相信这会奏效

find . -type f -name '*.sql' -exec bash -c 'cat '{}' | mysql' \;

基本上,上面的命令会查找所有以 .sql 结尾的文件(我在其中添加了 -type f,以防万一有以 .sql 结尾的目录)。对于找到的每个文件,find 都会运行 exec 命令。exec 会运行一个 bash 子 shell,它会 cat 该文件并将其传送到 mysql 程序。

希望这可以帮助。

答案2

不要尝试执行所有操作,可以考虑分两步操作:将所有文件路径收集到单个文件中,然后使用source命令运行生成的文件

find . type f -name '*.sql' -printf 'source  %P;\n'    > allsql.txt
mysql -u <user> -p  -e "source allsql.txt"

当然,如果不同的 sql 文件引用不同的数据库或有冲突的查询 - mysql 会抛出错误,因此即使这可能有效,但这通常不是最好的主意。您还应该记住,您运行查询的数据库名称应该在命令行或通过语句提供use <databasename>

相关内容