Diff dice que el archivo no existe, ¿por qué?

Diff dice que el archivo no existe, ¿por qué?

Transfiero un archivo desde un servidor remoto a mi servidor local. Si se hace esto, hago una diferencia para verificar si ambos archivos son idénticos y verificar si la transferencia se realizó correctamente. Entonces hago esto:

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

Cuando hago esto, siempre aparece un error como este:

diff: /home/backups/test.tar.gz: No such file or directory

y

[[: not found

Pero cuando hago un cat /home/backups/test.tar.gzarchivo, el archivo existe. Entonces, de alguna manera el comando no distingue entre sistema local y remoto y si después del comando ssh no se ejecuta.

¿Alguien sabe qué estoy haciendo mal?

PD: Y otra pregunta para principiantes: ¿Cuándo tengo que escribir variables como esta ${VAR}y cuándo $VAR?

Respuesta1

Usar rsynccon --remove-source-files.

rsync --remove-source-files "${SSH_USER}@${SSH_HOST}:$FOLDERPATH_REMOTE.tar.gz" \
                            "$FOLDERPATH_LOCAL.tar.gz"

En respuesta a sus otras preguntas, debe utilizarlos ${VAR}al colocar el nombre de la variable en medio de una palabra, -y .son buenos separadores, pero _no lo son.

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

También deberías usarlo [ "$?" -eq 0 ]para evitar el [[ not founderror: no has mencionado tu sistema operativo, pero parece que no tienes bash como /bin/sh. Nada de esto es necesario si usas rsyncpor supuesto.

información relacionada