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 mv
hat 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-run
Option.
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-excluded
Option verwenden. Überprüfen Sie vor dem Ausführen erneut, --dry-run
was gelöscht werden soll.
Es gibt einen , --remove-source-files
der 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