Lê variáveis no arquivo de saída & rsync

0

Alguém poderia dar o seu conselho sobre isso?

Eu estou querendo pegar um arquivo de saída de uma consulta mysql executada:

$code    $IP
123456   192.168.26.176
10051    192.168.20.80
234567   192.168.26.178

e execute-o no comando:

rsync -rvp *.$code.extension root@$IP:/path/of/dest

Estou tentando isso:

while read -r line ; do echo 
"$SOURCE_TRANSMIT_DIR"*."$code".class.json 
"$DEST_HOST"@"$IP":"$DEST_TRANSMIT_DIR" ; done

A saída que recebo é esta:

/opt/file/outgoing/*.123456
10051
234567.class.json [email protected]
192.168.20.80
192.168.26.178:/opt/file/incoming/

Onde gostaria que ele fosse lido assim em comandos rsync separados:

rsync -rvp *.123456.extension [email protected]:/path/of/dest
rsync -rvp *.234567.extension [email protected]:/path/of/dest
rsync -rvp *.345678.extension [email protected]:/path/of/dest

Espero que isso explique melhor, desculpe pela terrível explicação.

    
por Nicholas Green 05.02.2018 / 15:53

2 respostas

0

Não consigo ver o resultado da sua consulta mysql, mas você pode executá-la e analisar com o awk para imprimir exatamente o que você quer (veja a opção mysql para evitar imprimir tuplas e títulos -raw ou algo assim)

mysql -printingoptions "your query" |awk '{print "rsync -rvp *."$1".extension  root@"$2":/path/of/dest"}' 

Você pode canalizar para sh ou bash então (comandos | sh) para executar o rsync:)

Parece ser a maneira mais fácil de fazer isso para mim.

    
por 05.02.2018 / 18:31
0

Se você executar a saída de sua consulta mysql por meio dos comandos a seguir, ela fornecerá a saída desejada. Você pode usar essa saída para ser avaliada, por exemplo, canalizar em um arquivo e executar esse arquivo como um script de shell.

mysql | grep -v '\$' | while read line; do echo "${line}" | sed 's#\(^[0-9]*\)[\ ]*\([0-9\.]*\)#rsync -rvp *..extension root@:/path/of/dest#g'; done

Aqui estão os detalhes do comando:

mysql               # Your command with output (this is of course longer than this)
grep -v '\$'        # Exclude the header
while read line; do # Start a while-loop
echo "${line}"      # Echo the contents of the current line that we've read to the next command
# Regular expression to filter the number and the IP and add these to the command, they are held by the variables  .
sed 's#\(^[0-9]*\)[\ ]*\([0-9\.]*\)#rsync -rvp *..extension root@:/path/of/dest#g'
done;               # Close the while loop

E o conteúdo do regexp explicado:

(^[0-9]*\)   # From the beginning (^), zero or more (*) numerical [0-9] character
[\ ]*        # Zero or more (*) spaces. These are not in brackets, so they won't be matched into a variable.
([0-9\.]*    # Zero or more (*) numerical characters or points [0-9\.]
    
por 05.02.2018 / 16:13

Tags