Я передаю файл с удаленного сервера на свой локальный сервер. Если это сделано, я делаю diff, чтобы проверить, идентичны ли оба файла, чтобы проверить, была ли передача успешной. Поэтому я делаю это:
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
Когда я это делаю, я всегда получаю такую ошибку:
diff: /home/backups/test.tar.gz: No such file or directory
и
[[: not found
Но когда я делаю a, cat /home/backups/test.tar.gz
файл существует. Так что каким-то образом команда не различает локальную и удаленную систему, и if после команды ssh не выполняется.
Кто-нибудь знает, что я делаю не так?
PS: И еще один вопрос новичка: когда мне нужно писать переменные вот так, ${VAR}
а когда вот так $VAR
?
решение1
Использовать rsync
с --remove-source-files
.
rsync --remove-source-files "${SSH_USER}@${SSH_HOST}:$FOLDERPATH_REMOTE.tar.gz" \
"$FOLDERPATH_LOCAL.tar.gz"
В ответ на ваши другие вопросы, вам нужно использовать ${VAR}
при помещении имени переменной в середину слова-- -
и .
являются прекрасными разделителями, но _
не является.
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
Вам также следует использовать, [ "$?" -eq 0 ]
чтобы избежать [[ not found
ошибки - вы не указали свою ОС, но у вас, похоже, нет bash как /bin/sh. rsync
Конечно, ничего из этого не нужно, если вы используете.