SCP überträgt nur geänderte Dateien

SCP überträgt nur geänderte Dateien

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 updatebeim Befehl für cp?

Antwort1

rsyncist 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 --deleteOption 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.

verwandte Informationen