Wie kopiere ich ein gesamtes Verzeichnis in ein Verzeichnis mit demselben Namen, ohne den Inhalt im Zielverzeichnis zu ersetzen? (stattdessen möchte ich den Inhalt des Zielordners ergänzen)
ssh
rsync
scp
synchronization
Daniel Böhmer
quelle
quelle
Antworten:
Verwenden Sie
rsync
und übergeben-u
Sie, wenn Sie nur Dateien aktualisieren möchten, die neuer im ursprünglichen Verzeichnis sind, oder--ignore-existing
alle Dateien überspringen möchten, die bereits im Ziel vorhanden sind.(Beachten Sie das
/
auf der Quellseite: Ohnersync
würde es schaffen/remote/directory/directory
.)quelle
--ignore-existing
füge ohne zu ersetzen hinzu, welchen Datenverlust siehst du?rsync
leicht verfügbar ist .... (Wie Win32-OpenSSH)--rsync-path
benötigt wird)scp überschreibt die Dateien, wenn Sie über Schreibrechte verfügen.
Mit anderen Worten: Sie können diese
scp
Dateien effektiv überspringen, indem Sie vorübergehend die Schreibberechtigungen für sie entfernen (wenn Sie also der Eigentümer der Dateien sind).quelle
scp -r [email protected]:/location/of/files/* /local/location/
Sie können nur neue Dateien nach Datum kopieren. Verwenden
find
quelle
Wenn Sie den Inhalt der Zieldatei schreibgeschützt machen können:
vor dem Ausführen
scp
(es wird sich beschweren und die vorhandenen Dateien überspringen).Und ändern Sie sie anschließend zurück (
chmod +w
um einen auf umask basierenden Wert zu erhalten). Wenn die Dateien nicht alle Schreibrechte gemäß Ihrer umask haben, müssten Sie die Rechte irgendwie speichern, damit Sie sie wiederherstellen können.(Gilles 'Antwort überschreibt vorhandene Dateien, wenn sie lokal neuer sind. Ich habe auf diese Weise wertvolle Daten verloren. Verstehe nicht, warum diese falsche und schädliche Antwort so viele Stimmen hat.)
quelle
rsync --ignore-existing
Sie dazu gekommen, Daten zu verlieren?find: missing argument to '-exec'
diesem Befehl und stattdessen musste benutzenfind . -type f -exec chmod a-w {} \;
. Mein Linux ist schlecht, ymmv.find . -type f -exec chmod a-w {} \;
Ich hatte eine ähnliche Aufgabe, in meinem Fall konnte ich nicht verwenden
rsync
,csync
oder FUSE , weil meine Lagerung nur SFTP hat.rsync
Datum und Uhrzeit der Datei konnten nicht geändert werden. Einige andere Dienstprogramme (z. B.csync
) haben mir andere Fehler angezeigt : " Zeitversatz der temporären Datei konnte nicht erkannt werden ".Wenn Sie Zugriff auf den Storage-Server haben, können Sie diesen hier einfach als Daemon installieren
openssh-server
oder startenrsync
.In meinem Fall konnte ich das nicht und die Lösung war: lftp .
lftp
Die Verwendung von für die Synchronisierung ist nachstehend aufgeführt:/src/folder
- ist der Ordner auf meinem PC,/rem/folder
- istsftp://sft.domain.tld/rem/folder
.Manpages finden Sie unter folgendem Link: http://lftp.yar.ru/lftp-man.html
quelle
Um eine ganze Reihe von Dateien zu kopieren, ist es schneller, sie zu tarieren. Mit -k verhindern Sie außerdem, dass tar Dateien überschreibt, wenn es auf dem Zielsystem entpackt wird.
quelle
scp
überschreibt Dateien und es gibt keinen Schalter, um dies zu stoppen, aber Sie können Dinge aus dem Weg kopieren, scp ausführen und dann die vorhandenen Dateien zurückkopieren. Beispiele:Kopieren Sie alle vorhandenen Dateien aus dem Weg
Kopieren Sie alles mit scp
Kopieren Sie die Originaldateien über alles, was scp überschrieben hat:
quelle
Eine andere Möglichkeit, dies zu erreichen, besteht darin,
ls
im Zielordner Folgendes zu tun :Im Remote-Zielordner:
An der Quelle:
Am Bestimmungsort:
quelle
-
>
Leerzeichen oder andere Sonderzeichen enthält . 3. Erstellen Sie eine for-Schleife in einem Python-Skript. Das Generieren eines Programms zur Laufzeit ist aus vielen Gründen schwierig und schwierig (selbst wenn es von professionellen Programmierern durchgeführt wird). Ein Shell-Skript zu generieren ist noch schlimmer - eine schreckliche Idee.