Diff сообщает, что файл не существует. Почему?

Diff сообщает, что файл не существует. Почему?

Я передаю файл с удаленного сервера на свой локальный сервер. Если это сделано, я делаю 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Конечно, ничего из этого не нужно, если вы используете.

Связанный контент