So ersetzen Sie den gesamten Inhalt eines Ordners durch einen anderen

23

Ich habe Ordner oldund new.

Ich möchte , dass alle Inhalte in ersetzen old/*zu new/*. In diesen Ordnern können sich viele Unterverzeichnisse befinden.

Es kann jedoch nur wenige Dateien geben, die sich nicht in, new/*sondern in old/*befinden. Daher möchte ich, dass sie so bleiben, wie sie sind.

Wie kann ich das von einer Linux-Shell aus machen?

user105919
quelle

Antworten:

18

rsync wäre hier wahrscheinlich die bessere Option. Es ist so einfach wie rsync -a subdir / ./. Überprüfen Sie diese Antwort auf unix.stackexchage, um bessere Lösungen zu finden

Verwenden Sie -fmit dem cpBefehl

cp -fR /source/files /dest

cp zum überschreiben unterdrücken "prompt ..

Um den Alias ​​von cp zu überschreiben, können Sie ihn einfach in Anführungszeichen setzen:

 'cp' -rf ./source/* /destination/

Für weitere Informationen folgen Sie diesen Links:

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory

Niranjan Singh
quelle
23

Verwenden Sie rsync. Die Verzeichnisse werden in eine Richtung synchronisiert. Also, wenn Sie Ihren oldOrdner mit allem aus aktualisieren möchten new, aber behalten, was drin ist, verwenden Sie einfach:

rsync -avh --dry-run /path/to/new/ /path/to/old/

In einem ersten Fall wird nur die Liste der zu übertragenden Dateien ausgegeben. In diesem Fall: Alles, was in gefunden newwird, wird nach kopiert old, sofern es nicht bereits vorhanden ist. Alles oldbleibt wie es ist.

Wenn es Ihnen recht ist, entfernen Sie das --dry-runArgument, um sie wirklich zu übermitteln.

Die -avhFlags aktivieren lediglich den Archivierungsmodus (der Zeitstempel usw. beibehält), die Ausführlichkeit und die vom Menschen lesbaren Dateigrößen. Es wird nichts vom Ziel gelöscht, es sei denn, Sie geben die --deleteFlagge an. Konsultieren Sie man rsyncfür weitere Informationen.

slhck
quelle