Transfiro um arquivo de um servidor remoto para meu servidor local. Se isso for feito, faço uma comparação para verificar se os dois arquivos são idênticos para verificar se a transferência foi bem-sucedida. Então eu faço isso:
ssh -o StrictHostKeyChecking=no -l ${SSH_USER} ${SSH_HOST} "cat $FOLDERPATH_REMOTE.tar.gz" | diff - "$FOLDERPATH_LOCAL.tar.gz"
if [[ $? -eq 0 ]]; then
echo "\n##### Remove file from remote machine #####\n"
rm -f $FOLDERPATH_REMOTE.tar.gz
fi
Quando faço isso, sempre recebo um erro como este:
diff: /home/backups/test.tar.gz: No such file or directory
e
[[: not found
Mas quando faço isso, cat /home/backups/test.tar.gz
o arquivo existe. Então, de alguma forma, o comando não distingue entre sistema local e remoto e o if após o comando ssh não estar em execução.
Alguém sabe o que estou fazendo de errado?
PS: E outra pergunta de iniciante: Quando devo escrever variáveis como esta ${VAR}
e quando como $VAR
?
Responder1
Usar rsync
com --remove-source-files
.
rsync --remove-source-files "${SSH_USER}@${SSH_HOST}:$FOLDERPATH_REMOTE.tar.gz" \
"$FOLDERPATH_LOCAL.tar.gz"
Em resposta às suas outras perguntas, você precisa usar ${VAR}
ao colocar o nome da variável no meio de uma palavra - -
e .
são bons separadores, mas _
não são.
echo $var.txt # same as ${var}.txt
echo $var-2020.txt # same as ${var}-2020.txt
echo $var_2020.txt # same as ${var_2020}.txt
Você também deve usar [ "$?" -eq 0 ]
para evitar o [[ not found
erro - você não mencionou seu sistema operacional, mas parece não ter o bash como/bin/sh. Nada disso é necessário se você usar, rsync
é claro.