Wie verschiebt man alle Dateien und Unterverzeichnisse von einem Ordner in einen anderen? Der Befehl mv verschiebt keine Unterverzeichnisse

Wie verschiebt man alle Dateien und Unterverzeichnisse von einem Ordner in einen anderen? Der Befehl mv verschiebt keine Unterverzeichnisse

Ich möchte lediglich alle Dateien und Ordner einschließlich aller Unterverzeichnisse und deren Dateien in einen anderen Ordner und dessen Unterordner verschieben und überschreiben.

Ich habe die folgenden Befehle ausprobiert, aber sie funktionieren nicht im Unterverzeichnis und seinen Dateien.

mv -f fromA/* toB/

mv -f fromA/{,.}* toB/

Daher werden alle Dateien aus Ordner A in Ordner B verschoben, aber nicht von A/sub nach B/sub.

Ich erhalte die Fehlermeldung „Kann ‚fromA/subA‘ nicht nach ‚toB/subB‘ verschieben: Datei existiert“

Es funktioniert, wenn ich jeden Ordner einzeln durchgehe, aber ich bin sicher, dass ich etwas übersehe. Ich habe die meisten, wenn nicht alle zugehörigen Antworten gesehen, aber keine davon funktioniert hier.

Antwort1

info mvhat dies:

   _Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.

Es scheint keine Möglichkeit zu geben, dies zu überstimmen. Entfernen Sie entweder B und benennen Sie A um (zurück in B) oder leeren/löschen Sie zuerst die Verzeichnisse in B manuell.

Antwort2

Ich empfehle die Verwendungrsync

Mit rsync können Sie angeben, dass die Dateien gelöscht werden sollen, und Sie können sogar einen „Trockenlauf“ durchführen, um genau zu sehen, was passieren würde, wenn Sie es tatsächlich ausführen würden.

Versuchen

rsync -av --dry-run --delete-before fromA toB

Die Option --delete-before eignet sich hervorragend zum Zusammenführen von Dateien auf Systemen mit wenig Speicherplatz. Wenn Sie mit dem Probelauf zufrieden sind, entfernen Sie die --dry-runOption.

Ich empfehle, einen Blick auf die Manpage zu werfen, um alle verschiedenen „Lösch“-Optionen anzuzeigen und zu entscheiden, welche für Sie am besten geeignet ist.

Wenn Sie alle Dateien im Ziel löschen möchten, die nicht mit dem Verschieben in Zusammenhang stehen, können Sie diese --delete-excludedOption verwenden. Überprüfen Sie vor dem Ausführen erneut, --dry-runwas gelöscht werden soll.

Es gibt einen , --remove-source-filesder die Quelldateien während der Übertragung entfernt (wie mv), aber keine Verzeichnisse entfernt. Sie müssen also immer noch die Quellverzeichnisse entfernen mitrm

Antwort3

Basierend auf Ihrer Aussage, dass Sie eine Fehlermeldung erhalten, dass die Datei bereits existiert, haben Sie bereits Ordner und Dateien unter „toB“? Wenn Sie hauptsächlich die Dateien von „fromA“ nach „toB“ zusammenführen möchten, kopieren Sie die Dateien am besten einfach rekursiv (cp -ar) und entfernen anschließend „fromA“.

Andernfalls, wenn „toB“ zunächst leer sein sollte und Sie nur sicherstellen möchten, dass der Inhalt von „toB“ mit dem von „fromA“ übereinstimmt:

$ rm -rf toB
$ mv fromA toB

verwandte Informationen