Wie kopiere ich nur neue Dateien mit dem Befehl "scp"?

24

Ich habe Hunderte von Dateien auf einen anderen Computer kopiert, indem scpich den stalled Fehler gemeldet habe . Jetzt kopiere ich die Dateien nochmal. Gibt es eine Möglichkeit, das Kopieren der bereits kopierten Dateien zu vermeiden?

Meysam
quelle

Antworten:

40

Sie können dafür verwenden rsync. rsyncist 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 sshdie Parameter zu hinzu rsync. Beispielsweise:

rsync -avh -e ssh /source/path/ host:/destination/path
ein CVn
quelle
Ist das --ignore-existingwirklich nötig?
Meysam
Denn in diesem Beispiel des Handbuchs: 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 Unterschiede
gesendet werden
1
Ich benutze normalerweise rsync -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.
Edward Falk
6

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:

  1. chmod a-w local/*.tar.gz (in Ihrer Nähe)
  2. 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 )

xhudik
quelle
Ich mag diese Lösung wirklich. Ich sammle Dateien von entfernten Sensoren in einem Archiv. Das gesamte Arbeitsverzeichnis hat jeweils ein Unterverzeichnis Archive. Sobald Dateien in das Archiv aufgenommen wurden, werden sie nie mehr geändert. Es wäre wirklich einfach, archivierte Dateien als -w zu markieren, also werde ich dies tun. Und die Arbeitsdateien außerhalb der Archivverzeichnisse können so belassen werden, wie sie sind. Wenn ich das Aktualisierungsprogramm tagsüber ausführe, werden die in Bearbeitung befindlichen Dateien trotzdem kopiert. Genau das habe ich gesucht. TNX viel!
SDsolar
4

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

Rick
quelle
1
Nun, wohl lautete die ursprüngliche Frage "Wie kann ich dieses Problem lösen?", Für die rsync die Antwort ist.
Edward Falk