Ich verwende den folgenden Befehl, um Dateien zwischen Servern zu übertragen
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
Gibt es eine Möglichkeit, nur geänderte Dateien zu übertragen, genau wie update
beim Befehl für cp
?
Antwort1
rsync
ist dein Freund.
rsync -ru /source/directory/* [email protected]:/destination/directory
Wenn Sie möchten, dass Dateien am Ziel gelöscht werden, die an der Quelle nicht mehr vorhanden sind, fügen Sie die --delete
Option hinzu.
Antwort2
Im Allgemeinen fragt man nach scp, weil es einen Grund gibt. Beispielsweise kann rsyncd auf dem Ziel nicht installiert werden.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
Antwort3
Andere Option:
remote_sum=$(ssh ${remote} sha256sum ${dest_filename})
remote_sum=${remote_sum%% *}
local_sum=$(sha256sum ${local_filename})
local_sum=${local_sum%% *}
if [[ ${local_sum} != ${remote_sum} ]]; then
scp ${local_filename} ${remote}:${remote_filename}
fi
Das ist für eine Datei in Ordnung, wird aber für viele Dateien etwas langsam sein, je nachdem, wie schnell SSH wiederholte Verbindungen herstellen kann. Wenn Sie Controlmaster für Ihre SSH-Verbindung eingerichtet haben, ist es vielleicht nicht so schlimm. Wenn Sie einen ganzen Verzeichnisbaum rekursiv kopieren müssen, können Sie einen einzelnen SSH-Befehl ausführen, der alle Dateien summiert, das Ergebnis in ein assoziatives Bash-Array schiebt, dasselbe auf dem lokalen Host macht und dann die Dateisummen vergleicht, um zu entscheiden, ob die Kopie durchgeführt werden soll. Aber es ist fast sicher einfacher, rsync auf dem Remote-Rechner zu installieren.