it-swarm.com.de

scp ohne vorhandene Dateien im Ziel zu ersetzen

Wie kopiere ich ein gesamtes Verzeichnis in ein gleichnamiges Verzeichnis, ohne den Inhalt im Zielverzeichnis zu ersetzen? (Stattdessen möchte ich den Inhalt des Zielordners ergänzen.)

169
biznez

Verwenden Sie rsync und übergeben Sie -u wenn Sie nur Dateien aktualisieren möchten, die im ursprünglichen Verzeichnis neuer sind, oder --ignore-existing, um alle Dateien zu überspringen, die bereits im Ziel vorhanden sind.

rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/

(Beachten Sie das / auf der Quellseite: ohne es würde rsync/remote/directory/directory.)

scp überschreibt die Dateien, wenn Sie Schreibberechtigungen dafür haben.

Mit anderen Worten: Sie können scp dazu bringen, diese Dateien effektiv zu überspringen, indem Sie vorübergehend die Schreibberechtigungen für sie entfernen (wenn Sie der Eigentümer der Dateien sind).

88
Reimund

Sie können nur neue Dateien nach Datum kopieren. Verwenden Sie find

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
12
Naks

Wenn Sie den Inhalt der Zieldatei schreibgeschützt machen können:

find . -type f -exec chmod a-w '{}' \;

vor dem Ausführen von scp (es wird sich beschweren und die vorhandenen Dateien überspringen).

Und ändern Sie sie danach wieder (chmod +w um umaskbasierten Wert zu erhalten). Wenn die Dateien nicht alle Schreibberechtigungen gemäß Ihrer Umask haben, müssten Sie die Berechtigungen irgendwie speichern, damit Sie sie wiederherstellen können.

(Gilles 'Antwort überschreibt vorhandene Dateien, wenn sie lokal neuer sind. Auf diese Weise habe ich wertvolle Daten verloren. Verstehe nicht, warum diese falsche und schädliche Antwort so viele Stimmen hat).

10
Mohad

Um eine ganze Reihe von Dateien zu kopieren, ist es schneller, sie zu tarieren. Mit -k verhindern Sie auch, dass tar Dateien beim Entpacken auf dem Zielsystem überschreibt.

tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>' 
7
huembi

Ich hatte eine ähnliche Aufgabe, in meinem Fall konnte ich rsync, csync oder Fuse nicht verwenden, da mein Speicher nur SFTP enthält. rsync konnte Datum und Uhrzeit für die Datei nicht ändern, einige andere Dienstprogramme (wie csync) zeigten mir andere Fehler: " Temporäre Datei kann nicht erstellt werden. Zeitversatz erkannt ".

Wenn Sie Zugriff auf den Speicherserver haben, installieren Sie einfach openssh-server oder starte rsync hier als Daemon.

In meinem Fall - ich konnte dies nicht tun und die Lösung war: lftp . Die Verwendung von lftp für die Synchronisation ist unten:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - ist der Ordner auf meinem PC, /rem/folder - ist sftp://sft.domain.tld/rem/folder.

Sie finden Manpages unter folgendem Link: http://lftp.yar.ru/lftp-man.html

6
bolD

scp überschreibt Dateien und es gibt keinen Schalter, um dies zu verhindern, aber Sie können Dinge aus dem Weg kopieren, scp ausführen und dann die vorhandenen Dateien zurück kopieren. Beispiele:

  1. Kopieren Sie alle vorhandenen Dateien aus dem Weg

    mkdir original_files ; cp -r * original_files/
    
  2. Kopieren Sie alles mit scp

    scp -r [email protected]:dir/* ./
    
  3. Kopieren Sie die Originaldateien über alles, was scp überschrieben hat:

    cp -r original_files/* ./
    
0
A.Badger