it-swarm.com.de

So ersetzen Sie den gesamten Inhalt eines Ordners durch einen anderen

Ich habe Ordner old und new.

Ich möchte den gesamten Inhalt von old/* in new/* ersetzen. In diesen Ordnern können sich viele Unterverzeichnisse befinden.

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

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

22
user105919

rsync wäre hier wahrscheinlich die bessere Option. Es ist so einfach wie rsync -a Unterverzeichnis/./. Aktivieren Sie diese unix.stackexchage-Antwort , um bessere Lösungen zu erhalten

verwenden Sie -f mit dem Befehl cp

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

18
Niranjan Singh

Verwenden Sie rsync. Die Verzeichnisse werden in eine Richtung synchronisiert. Wenn Sie also Ihren Ordner "old" mit allem aus "new" aktualisieren möchten, aber den Inhalt behalten möchten, verwenden Sie einfach Folgendes:

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 new zu finden ist, wird nach old kopiert, sofern es nicht bereits vorhanden ist. Alles in old bleibt wie es ist.

Wenn es für Sie in Ordnung ist, entfernen Sie das Argument --dry-run, um sie wirklich zu übertragen.

Die -avh Flags aktivieren nur 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 das Flag --delete an. Weitere Informationen finden Sie in man rsync.

23
slhck