Frage mv: Verzeichnis ist nicht leer


Ich möchte Inhalt eines Verzeichnisses in einem anderen Verzeichnis mit den gleichen Ordnern verschieben.

Hier ist ein Beispiel:

ich habe ./backup welche die Verzeichnisse haben 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 es versucht --forceaber 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 gibt kein Überschreiben.


124
2018-03-19 04:11


Ursprung


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 ...... Daten zu kürzen) - Thomas Ward♦
Ich möchte nur den Inhalt zusammenführen, es gibt kein Überschreiben. - UdK
@UdK Auch wenn das funktionieren würde, beachte, dass dies der Fall wäre nicht füge den Inhalt der beiden Verzeichnisse zusammen. Durch das Verschieben eines Verzeichnisses wird das Ziel ersetzt. Schau es dir an rsync stattdessen wird es das Zusammenführen tun. - zwets


Antworten:


Obwohl seine Manpage es nicht dokumentiert, mv wird es ablehnen, ein Verzeichnis in ein anderes Verzeichnis umzubenennen, wenn das Zielverzeichnis Dateien enthält. Das ist in Ihrem Fall eine gute Sache, weil Sie sich entschließen wollen verschmelzen der Inhalt der Quelle in das Ziel, die mv wird nicht tun.

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

Anstatt zu verwenden rsyncSie können auch das klassische tun

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

was dir mehr Aussenseiterpunkte bringt.


159
2018-03-19 07:51



nette Dinge zu wissen! Beide arbeiten großartig. Vielen Dank! - UdK
Geek Punkte sind die besten Punkte: D - MadMike
sollte beachtet werden, dass dies erfordert, dass Sie die Größe des Ordners im freien Speicherplatz haben. Und wird schreckliche Probleme verursachen, wenn nicht. - Pogrindis
@ Pogrindis Bitte erläutern Sie was schrecklich Probleme werden auftreten, und wie unterscheiden sie sich von jedem anderen Versuch, auf eine vollständige Festplatte zu schreiben? In der Tat, da beide Operationen das ursprüngliche Verzeichnis intakt halten, wenn die Operation fehlschlägt, einfach rm -rf backupArchives ohne Folgen, geschweige denn "schreckliche". - zwets
Danke, dass du den klassischen Ansatz nennst, sehr hilfreich, wenn rsync nicht verfügbar ist! Funktioniert auch mit Sudo mit sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)' - ArendE


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

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

24
2017-10-10 16:07



Funktioniert auch in meinem abgesicherten Modus, genial. - Banned_User


Nach dem Verzeichnis, das du bewegst, brauchst du * (steht für einen beliebigen Text oder eine beliebige Zahl). Beispielsweise:

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

Das ist alles, wenn Sie Dateien verschieben, als Sie verschieben als:

mv /var/www/index.php /recovery/index.php

Eine andere Möglichkeit besteht darin, den Ordnerinhalt mithilfe von tar zu packen:

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

Dann verschiebe es eine beliebige andere Datei. Auch empfehle ich diesen Schritt, weil Teer es komprimiert und es kleiner macht.

Um die Dateien in einen anderen Ordner zu extrahieren, verwenden Sie

tar -xvzpf /var/www/

Wenn Sie an einen Speicherort kopieren müssen, der Ihnen nicht gehört, stellen Sie sicher, dass Sie den Befehl mit dem Befehl voranstellen sudo Befehl nach welcher Option Sie sich entscheiden zu verwenden.

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

3
2018-03-19 04:27



Ich benutze Ubuntu 12.10 und ich habe: mv: Ungültige Option - 'R' Versuchen Sie `mv --help 'für weitere Informationen. In der Tat .tar ist nett, aber ich muss wissen, wie man meine Dateien für diese Situation bewegt. Danke für Ihre Hilfe - UdK
Ich benutze 12.04 Desktop und Server und in beiden funktioniert gut. sei vorsichtig, wenn du keinen Platz zwischen folfer und -R machst. Ich habe auch versucht, ohne -R funktioniert auf die gleiche Weise für mich, versuchen Sie ohne -R, aber seien Sie vorsichtig mit der Rechtschreibung: Linux Angelegenheiten Klein- und Großbuchstaben !!! als wenn der Pfad sich von dem Ort weg bewegt oder bewegt. Wenn Sie nicht den Ordner haben, den Sie verschieben möchten, setzen Sie einfach -C danach und es wird erstellt. versuche auch zuerst: finde -iname Name Ihres Ordners  und führe diesen Befehl von root aus, nur um zu sehen, ob es an anderer Stelle existiert, wenn du etwas falsch buchstabiert hast. Gib mir den genauen Befehl, den du benutzt hast - Dimitris Theodoridis
was thaa ..... setze den Dateinamen zwischen - Dimitris Theodoridis
Das -R sicherlich sollte nicht nach dem ersten Argument kommen. Optionen stehen (fast) immer vor den Befehlsargumenten. Ebenfalls, mv hat kein -R Option, und schließlich ist Rekursion für a nicht relevant mv. @DimitrisTheodoridis bitte teste deine Antwort zuerst. - zwets
Ja, mein Bruder, du hast Recht, ich habe immer Probleme mit meiner Rechtschreibung, und immer habe ich Probleme mit dem Terminal oder dem Befehl nicht gefunden oder erstelle neue Dateien und Verzeichnisse, die ich nicht kenne, nur für bas Rechtschreibung ... übrigens ich used cp command, als hier schrieb mv sory für diesen bro: D - Dimitris Theodoridis


Sicher rsync funktioniert, aber dies funktioniert möglicherweise auch für eine Maschine, die nicht unterstützt rsync (d. h. in cpanel, welches rsync standardmäßig nicht installiert ist).

Was ist mit der Verwendung von:

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

Dann entferne die backup Verzeichnis falls nötig

Anmerkung1: Sie müssen cd zum backup Verzeichnis vor dem Ausführen der cp -R --parents ... 

Hinweis2: Überprüfen Sie die backupArchives Verzeichnis, wenn Sie die neuen Dateien von der Sicherung erhalten haben.


3
2018-03-03 07:45





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

Angenommen, in / home / admin haben wir zwei Ordner foo und bar die die gleiche Unterverzeichnisstruktur haben, aber jeweils unterschiedliche Dateien darin enthalten. Jetzt wollen wir sie zu einem zusammenführen. Wenn wir Dinge tun wie mv foo/* bar, der Fehler mv: directory not empty tritt ein.

Meine Lösung besteht darin, Befehlszeilentools aufzugeben und zu einem GUI-Dateimanager zu wechseln, zum Beispiel dolphin. Wenn Sie umbenennen foo zu bar In Delphin gibt es die Möglichkeit, in den Zielordner zu schreiben, und fragt Sie, ob vorhandene Dateien interaktiv überschrieben werden sollen. Dies vermeidet Kopieren und Löschen, was im Endeffekt Ihre Zeit ohne eine einzige Codezeile spart.

PS: Ich habe nicht jeden Dateimanager dort draußen getestet. Aber die meisten von ihnen sollten diese Funktion haben.


1
2017-10-12 09:22