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.gz
ist 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 rsync
mit --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 found
Sie haben Ihr Betriebssystem nicht erwähnt, aber Sie scheinen Bash nicht als /bin/sh zu haben. Nichts davon ist natürlich erforderlich, wenn Sie rsync
Folgendes verwenden.