Sie können dafür verwenden rsync
. rsync
ist wirklich für diese Art von Betrieb ausgelegt.
Syntax:
rsync -avh /source/path/ host:/destination/path
oder
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Wenn Sie es zum ersten Mal ausführen, werden alle Inhalte kopiert, und es werden nur neue Dateien kopiert.
Wenn Sie den Datenverkehr über eine SSH-Verbindung tunneln müssen (z. B. aus Gründen der Vertraulichkeit), wie von Ihrer ursprünglichen Anfrage nach einer SCP-basierten Lösung angegeben, fügen Sie einfach -e ssh
die Parameter zu hinzu rsync
. Beispielsweise:
rsync -avh -e ssh /source/path/ host:/destination/path
--ignore-existing
wirklich nötig?rsync -t *.c foo:src/
-> "Dies würde alle Dateien, die mit dem Muster * .c übereinstimmen, aus dem aktuellen Verzeichnis in das Verzeichnis src auf dem Computer übertragen. Wenn eine der Dateien bereits auf dem fernen System vorhanden ist, dann führt der Befehl rsync remote- Update-Protokoll wird verwendet, um die Datei zu aktualisieren, indem nur die Unterschiedersync -avuzh /source/path/ host:/destination/path
. Das erledigt die ganze Arbeit in einem Befehl und überträgt bei nachfolgenden Aufrufen nur die Dateien, die es benötigen.Wenn Sie aus irgendeinem Grund bei scp bleiben möchten, können Sie w Berechtigungen für Ihre lokalen Daten entfernen (wenn Sie das Recht dazu haben) und scp wird es nicht berühren. Präziser sein:
chmod a-w local/*.tar.gz
(in Ihrer Nähe)scp remote/*.tar.gz local
Dies ist nicht sehr effizient, kann aber hilfreich sein, wenn Sie eine schnelle vorübergehende Lösung benötigen, ohne zu etwas anderem als scp zu wechseln. (Kudos: scp ohne bestehende Dateien im Ziel zu ersetzen )
quelle
Es gab keine genaue Antwort darauf, wie dies mit SCP geschehen sollte, da dies die ursprüngliche Frage war.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r [email protected]:/file/location/* /files
Wenn das Kopieren der Dateien abgeschlossen ist, ändern Sie die Berechtigungen zurück:
sudo chmod a+w -R /files
quelle