mv: Verzeichnis nicht leer


155

Ich möchte den Inhalt eines Verzeichnisses in ein anderes Verzeichnis mit denselben Ordnern verschieben.

Hier ist ein Beispiel:

Ich habe ./backupdie Verzeichnisse baseund 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.


Versuchen Sie nur, den Inhalt der Ordner mit dem Ziel zusammenzuführen, oder versuchen Sie, den Inhalt des Ziels zu überschreiben. (Es hilft auch, wenn Sie den GESAMTEN Fehler haben, ohne ...... zum Abschneiden von Daten zu verwenden.)
Thomas Ward

Ich möchte nur den Inhalt zusammenführen, es gibt kein Überschreiben.
UdK

2
@UdK Auch wenn dies funktionieren würde, beachten Sie, dass dies nicht den Inhalt der beiden Verzeichnisse zusammenführen. Das Verschieben eines Verzeichnisses ersetzt dessen Ziel. Schauen Sie sich rsyncstattdessen an, es wird das Zusammenführen übernehmen.
zwets

Antworten:


188

Obwohl seine Manpage es nicht dokumentiert, mvwird 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, das mvnicht tun.

Verwenden Sie rsync -a backup/ backupArchives/stattdessen. Danach rm -rf backup/*.

Anstelle der Verwendung rsynckönnen Sie auch die klassische tun

(cd backup && tar c .) | (cd backupArchives && tar xf -)

Das bringt dir mehr Geek Punkte.


4
schöne Dinge zu wissen! Beide arbeiten großartig. Vielen Dank!
UdK

5
Geek Punkte sind die besten Punkte: D
MadMike

2
Zu beachten ist, dass Sie die Größe des Ordners im freien Speicherplatz haben müssen. Und wird schreckliche Probleme verursachen, wenn nicht.
Pogrindis

4
@Pogrindis Bitte erläutern Sie, welche schrecklichen Probleme auftreten werden und wie sie sich von jedem anderen Versuch, auf eine vollständige Festplatte zu schreiben, unterscheiden. In der Tat, da beide Operationen das ursprüngliche Verzeichnis intakt halten, wenn die Operation einfach rm -rf backupArchivesohne Konsequenzen fehlschlägt , geschweige denn "schreckliche".
Zwets

4
Vielen Dank für die Benennung des klassischen Ansatzes, sehr hilfreich, wenn rsync nicht verfügbar ist! Funktioniert auch mit sudo mitsudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE

39

Schnell und dreckig, wenn Sie wissen, was Sie tun:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

3
Funktioniert auch in meinem abgesicherten Modus, genial.
Banned_User

4

Nach dem Verzeichnis, das Sie verschieben, benötigen Sie *(steht für einen beliebigen Text oder eine beliebige Nummer). Zum Beispiel:

mv /var/www/* /recovery/wwwrecovery/

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:

tar -cvzpf backup.tar.gz /var/www 

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

tar -xvzpf /var/www/

Wenn Sie an einen Speicherort kopieren müssen, den Sie nicht besitzen, stellen Sie sicher, dass Sie Ihrem Befehl den sudoBefehl nach der Option voranstellen, die Sie verwenden möchten .

sudo tar -cvzpf backup.tar.gz /var/www/

Ich verwende Ubuntu 12.10 und habe folgende Meldung erhalten: mv: ungültige Option - 'R' Weitere Informationen erhalten Sie unter `mv --help '. TAR ist in der Tat nett, aber ich muss wissen, wie ich meine Dateien für diese Situation verschieben kann. Vielen Dank für Ihre Hilfe
UdK

Ich benutze 12.04 Desktop und Server und in beiden funktioniert gut. Seien Sie vorsichtig, wenn Sie keinen Platz zwischen folfer und -R schaffen. Ich habe auch versucht, ohne -R funktioniert auf die gleiche Weise für mich, versuchen Sie es ohne -R, aber seien Sie vorsichtig mit der Rechtschreibung: Linux zählt Klein- und Großbuchstaben! als wenn der Pfad fehlerhaft ist oder sich von einem Ort aus bewegt. Wenn Sie nicht über den Ordner verfügen, den Sie verschieben möchten, setzen Sie einfach -C hinter den Ordner und der Ordner wird erstellt. Versuchen Sie es auch zuerst: Suchen Sie den Namen -iname Ihres Ordners und führen Sie diesen Befehl im Stammverzeichnis aus, um festzustellen , ob er an einer anderen Stelle vorhanden ist, wenn Sie etwas falsch geschrieben haben. Gib mir genau das Kommando, das du benutzt hast
Dimitris Theodoridis

was thaaa ..... legte diesen Dateinamen zwischen **
Dimitris Theodoridis

1
Das -Rsollte sicher nicht nach dem ersten Streit kommen. Optionen stehen (fast) immer vor den Befehlsargumenten. Hat mvauch keine -ROption, und schließlich ist die Rekursion für a irrelevant mv. @ DimitrisTheodoridis bitte testen Sie Ihre Antwort zuerst.
zwets

ja mein bro du hast recht, ich habe immer probleme mit meiner rechtschreibung, und immer habe ich probleme mit dem terminal dafür oder befehl nicht gefunden oder erstelle neue dateien und verzeichnisse die ich nicht kenne, nur für bas rechtschreibung ... übrigens ich benutzte den Befehl cp, als hier mv sory für diesen Bruder schrieb: D
Dimitris Theodoridis

4

Sicher rsyncfunktioniert, aber dies funktioniert möglicherweise auch für Computer, die dies nicht unterstützen rsync(dh in cpanel, das standardmäßig nicht mit rsync installiert ist).

Was ist mit:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Entfernen Sie backupdann gegebenenfalls das Verzeichnis

Hinweis 1: Sie müssen cdin das backupVerzeichnis wechseln, bevor Sie den Befehl ausführencp -R --parents ...

Hinweis 2: Überprüfen Sie das backupArchivesVerzeichnis erneut, wenn Sie die neuen Dateien aus der Sicherung erhalten haben.


1

Bevor wir die Frage stellen, betrachten wir einen vereinfachten Fall.

Angenommen, in / home / admin befinden sich zwei Ordner foomit barderselben Unterverzeichnisstruktur, die jedoch jeweils unterschiedliche Dateien enthalten. Jetzt wollen wir sie zu einem zusammenführen. Wenn wir Dinge wie tun mv foo/* bar, tritt der Fehler mv: directory not emptyauf.

Meine Lösung besteht darin, auf Befehlszeilentools zu verzichten und zu einem GUI-Dateimanager zu wechseln, z. B. Delphin. Wenn Sie umbenennen foozu barin 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.