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)
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)
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.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Beachten Sie das /
auf der Quellseite: Ohne rsync
würde es schaffen /remote/directory/directory
.)
--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).
scp -r user@server.com:/location/of/files/* /local/location/
Sie können nur neue Dateien nach Datum kopieren. Verwendenfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Wenn Sie den Inhalt der Zieldatei schreibgeschützt machen können:
find . -type f -exec chmod a-w '{}' \;
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.)
rsync --ignore-existing
Sie dazu gekommen, Daten zu verlieren?
find: missing argument to '-exec'
diesem Befehl und stattdessen musste benutzen find . -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 starten rsync
.
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:
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
.
Manpages finden Sie unter folgendem Link: http://lftp.yar.ru/lftp-man.html
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.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
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
mkdir original_files ; cp -r * original_files/
Kopieren Sie alles mit scp
scp -r user@server:dir/* ./
Kopieren Sie die Originaldateien über alles, was scp überschrieben hat:
cp -r original_files/* ./
Eine andere Möglichkeit, dies zu erreichen, besteht darin, ls
im Zielordner Folgendes zu tun :
Im Remote-Zielordner:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
An der Quelle:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
Am Bestimmungsort:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
-
>
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.