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.gz
archivo, 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 rsync
con --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 found
error: no has mencionado tu sistema operativo, pero parece que no tienes bash como /bin/sh. Nada de esto es necesario si usas rsync
por supuesto.