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 rsyncund übergeben -uSie, wenn Sie nur Dateien aktualisieren möchten, die neuer im ursprünglichen Verzeichnis sind, oder --ignore-existingalle 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 rsyncwürde es schaffen /remote/directory/directory.)
--ignore-existingfüge ohne zu ersetzen hinzu, welchen Datenverlust siehst du?
rsyncleicht verfügbar ist .... (Wie Win32-OpenSSH)
--rsync-pathbenötigt wird)
scp überschreibt die Dateien, wenn Sie über Schreibrechte verfügen.
Mit anderen Worten: Sie können diese scpDateien 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 +wum 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-existingSie 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, csyncoder FUSE , weil meine Lagerung nur SFTP hat. rsyncDatum 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-serveroder starten rsync.
In meinem Fall konnte ich das nicht und die Lösung war: lftp . lftpDie 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, lsim 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.