源多个名称为空白的 sql 文件

源多个名称为空白的 sql 文件

我实际上正在阻止一件愚蠢的事情......但我无法完成它。

我们有一个 git 存储库,其中有 php 文件和 sql 补丁。每次我更新我的仓库时,我都必须检查是否需要打任何sql补丁。为了避免搜索哪个要玩,我制作了一个小脚本,为我提供了我上次 git pull 给我的每个 sql 文件:

find $MY_DIR/scripts/sandbox/migrations -type f -newermt $(date +'%Y-%m-%d') ! -newermt $(date +'%Y-%m-%d' --date="tomorrow") -not -path "$MY_DIR/scripts/sandbox/migrations/generated/*"

这给了我和输出,看起来像这样

/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.14 - script1.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.09.28 - script2.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.15 - script3.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.12 - script4.sql

现在,我正在尝试在 mysql 中自动获取这些文件。我尝试过做这样的事情:

mysql myDataBase < $(./myStript.sh)

但我收到一条错误消息ambiguous redirection

所以我尝试了:

cat $(./myScript.sh) | mysql myDataBase

但现在,我的文件名路径中包含的空间被阻塞,并且 mysql 说“没有现有文件”,因为它仅/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.09.28作为文件名路径。

我想我必须摆脱空白,但我找不到任何有效的优雅解决方案。

更新:我想保持 myScript.sh 独立,这样我就可以在其他事情上使用它。

答案1

./myStript.sh | while read line
do 
    mysql myDataBase < "$line"
done

运行脚本并逐行获取输出,将结果作为文件路径传递给 mysql 以供其读取和处理。向 $line 变量(文件路径)添加引号以考虑空格。

答案2

就像是

find $MY_DIR/scripts/sandbox/migrations -type f \ -newermt $(date +'%Y-%m-%d') ! \ -newermt $(date +'%Y-%m-%d' --date="tomorrow") \ -not -path "$MY_DIR/scripts/sandbox/migrations/generated/*" \ -exec msqlclient MyDatabase -u $USER -h $HOST -p < "{}" \;

根据需要替换 $USER 和 $HOST

相关内容