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?

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

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 )


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 username@server.com:/file/location/* /files

Wenn das Kopieren der Dateien abgeschlossen ist, ändern Sie die Berechtigungen zurück:

sudo chmod a+w -R /files


1
Nun, wohl lautete die ursprüngliche Frage "Wie kann ich dieses Problem lösen?", Für die rsync die Antwort ist.
Edward Falk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.