Diff diz que o arquivo não existe – por quê?

Diff diz que o arquivo não existe – por quê?

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.gzo 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 rsynccom --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 founderro - 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.

informação relacionada