Ich möchte den Inhalt eines Verzeichnisses in ein anderes Verzeichnis mit denselben Ordnern verschieben.
Hier ist ein Beispiel:
Ich habe ./backup
die Verzeichnisse base
und test
. Jetzt möchte ich diese Verzeichnisse verschieben ./backupArchives
.
Ich benutze das:
mv ./backup/* ./backupArchives
aber ich habe den fehler bekommen
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
Ich habe versucht mit --force
, aber kein Glück. Gibt es eine Möglichkeit, es zu verschieben, wenn bereits Ordner vorhanden sind?
Hinweis: Ich möchte nur Inhalte zusammenführen, es erfolgt kein Überschreiben.
rsync
stattdessen an, es wird das Zusammenführen übernehmen.Antworten:
Obwohl seine Manpage es nicht dokumentiert,
mv
wird es abgelehnt, ein Verzeichnis in ein anderes Verzeichnis umzubenennen, wenn das Zielverzeichnis Dateien enthält. Dies ist eine gute Sache , in Ihrem Fall , weil Sie entpuppen wollen fusionieren , den Inhalt der Quelle in das Ziel, dasmv
nicht tun.Verwenden Sie
rsync -a backup/ backupArchives/
stattdessen. Danachrm -rf backup/*
.Anstelle der Verwendung
rsync
können Sie auch die klassische tunDas bringt dir mehr Geek Punkte.
quelle
rm -rf backupArchives
ohne Konsequenzen fehlschlägt , geschweige denn "schreckliche".sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
Schnell und dreckig, wenn Sie wissen, was Sie tun:
quelle
Nach dem Verzeichnis, das Sie verschieben, benötigen Sie
*
(steht für einen beliebigen Text oder eine beliebige Nummer). Zum Beispiel:Das ist alles, wenn Sie Dateien verschieben, als Sie verschieben:
mv /var/www/index.php /recovery/index.php
Eine andere Möglichkeit besteht darin, den Ordnerinhalt mit tar zu packen:
Dann verschiebe es auf eine beliebige andere Datei. Ich empfehle diesen Schritt auch, weil Teer ihn komprimiert und verkleinert.
Um die Dateien in einen anderen Ordner zu extrahieren, verwenden Sie
Wenn Sie an einen Speicherort kopieren müssen, den Sie nicht besitzen, stellen Sie sicher, dass Sie Ihrem Befehl den
sudo
Befehl nach der Option voranstellen, die Sie verwenden möchten .quelle
-R
sollte sicher nicht nach dem ersten Streit kommen. Optionen stehen (fast) immer vor den Befehlsargumenten. Hatmv
auch keine-R
Option, und schließlich ist die Rekursion für a irrelevantmv
. @ DimitrisTheodoridis bitte testen Sie Ihre Antwort zuerst.Sicher
rsync
funktioniert, aber dies funktioniert möglicherweise auch für Computer, die dies nicht unterstützenrsync
(dh in cpanel, das standardmäßig nicht mit rsync installiert ist).Was ist mit:
Entfernen Sie
backup
dann gegebenenfalls das VerzeichnisHinweis 1: Sie müssen
cd
in dasbackup
Verzeichnis wechseln, bevor Sie den Befehl ausführencp -R --parents ...
Hinweis 2: Überprüfen Sie das
backupArchives
Verzeichnis erneut, wenn Sie die neuen Dateien aus der Sicherung erhalten haben.quelle
Bevor wir die Frage stellen, betrachten wir einen vereinfachten Fall.
Angenommen, in / home / admin befinden sich zwei Ordner
foo
mitbar
derselben Unterverzeichnisstruktur, die jedoch jeweils unterschiedliche Dateien enthalten. Jetzt wollen wir sie zu einem zusammenführen. Wenn wir Dinge wie tunmv foo/* bar
, tritt der Fehlermv: directory not empty
auf.Meine Lösung besteht darin, auf Befehlszeilentools zu verzichten und zu einem GUI-Dateimanager zu wechseln, z. B. Delphin. Wenn Sie umbenennen
foo
zubar
in Delphin, es gibt Ihnen die Möglichkeit , in den Zielordner zu schreiben, und fragt Sie , ob vorhandene Dateien überschrieben werden sollen, interaktiv. Dies vermeidet das Kopieren und Löschen, wodurch Sie ohne eine einzige Codezeile Zeit sparen.PS: Ich habe nicht jeden Dateimanager da draußen getestet. Aber die meisten von ihnen sollten diese Funktion haben.
quelle