Fonte de vários arquivos sql com espaço em branco no nome

0

Na verdade estou bloqueando uma coisa estúpida ... mas não consigo entender.

Temos um repositório git no qual temos nossos arquivos php e nosso patch sql. Toda vez que eu atualizar meu repo, eu tenho que verificar se qualquer patch sql tem que ser jogado. Para evitar a procura de um que eu possa jogar, eu fiz um pequeno script que me dava todos os arquivos sql que o meu último git pull me dava:

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/*"

Isso me dá uma saída parecida com essa

/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

Agora, estou tentando criar esses arquivos automaticamente no mysql. Eu tentei fazer algo assim:

mysql myDataBase < $(./myStript.sh)

Mas recebo uma mensagem de erro com ambiguous redirection .

Então eu tentei:

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

Mas agora, o espaço contido no caminho do meu nome de arquivo está bloqueando, e o mysql disse "nenhum arquivo existente" porque leva apenas /home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.09.28 como caminho do nome do arquivo.

Eu acho que tenho que escapar dos espaços em branco, mas eu não estou encontrando nenhuma solução elegante que funcione.

Update: Eu quero manter o myScript.sh independente, para que eu possa usá-lo em outras coisas.

    
por Carpette 05.01.2018 / 15:29

2 respostas

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

Execute o script e pegue a saída linha a linha, passando o resultado como um caminho de arquivo para o mysql para que ele seja lido e processado. Adicione aspas à variável $ line (caminho do arquivo) para considerar os espaços.

    
por 05.01.2018 / 15:47
0

Algo como

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 < "{}" \;

Substitua $ USER e $ HOST conforme apropriado

    
por 05.01.2018 / 15:50

Tags