Diff sagt, Datei existiert nicht – warum?

Diff sagt, Datei existiert nicht – warum?

Ich übertrage eine Datei von einem Remote-Server auf meinen lokalen Server. Anschließend führe ich einen Diff-Test durch, um zu prüfen, ob beide Dateien identisch sind und ob die Übertragung erfolgreich war. Ich mache also Folgendes:

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

Wenn ich das mache, erhalte ich immer eine Fehlermeldung wie diese:

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

Und

[[: not found

Aber wenn ich eins mache, cat /home/backups/test.tar.gzist die Datei vorhanden. Der Befehl unterscheidet also irgendwie nicht zwischen lokalem und Remote-System und das if nach dem SSH-Befehl wird nicht ausgeführt.

Weiß jemand, was ich falsch mache?

PS: Und noch eine Anfängerfrage: Wann muss ich Variablen so schreiben ${VAR}und wann so $VAR?

Antwort1

Benutzen rsyncmit --remove-source-files.

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

Als Antwort auf Ihre anderen Fragen müssen Sie verwenden, ${VAR}wenn Sie den Variablennamen in die Mitte eines Wortes setzen – -und .sind gute Trennzeichen, _ist es aber nicht.

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 ]Um den Fehler zu vermeiden , sollten Sie auch Folgendes verwenden: [[ not foundSie haben Ihr Betriebssystem nicht erwähnt, aber Sie scheinen Bash nicht als /bin/sh zu haben. Nichts davon ist natürlich erforderlich, wenn Sie rsyncFolgendes verwenden.

verwandte Informationen