鉴于:
包含带.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>
。