mv: Verzeichnis ist nicht leer

119

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

Hier ist ein Beispiel:

Ich habe ./backup mit den Verzeichnissen base und test . Jetzt möchte ich diese Verzeichnisse in ./backupArchives verschieben.

Ich benutze das:

mv ./backup/* ./backupArchives

aber ich habe den Fehler

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Ich habe versucht, --force zu verwenden, 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 gibt kein Überschreiben.

    
UdK 19.03.2013, 05:11
quelle

5 Antworten

156

Obwohl seine man-Seite es nicht dokumentiert, verweigert mv die Umbenennung eines Verzeichnisses in ein anderes Verzeichnis, wenn das Zielverzeichnis Dateien enthält. Dies ist in Ihrem Fall eine gute Sache, da Sie den Inhalt der Quelle in das Ziel zusammenführen möchten, was mv nicht tut.

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

Anstatt rsync zu verwenden, können Sie auch das klassische

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

das bringt dir mehr Aussenseiterpunkte.

    
zwets 19.03.2013, 08:51
quelle
24

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

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
patrickvacek 10.10.2013 18:07
quelle
3

Nach dem Verschieben des Verzeichnisses benötigen Sie * (steht für einen beliebigen Text oder eine beliebige Zahl). Zum Beispiel:

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

Das ist alles, wenn Sie Dateien verschieben, dann bewegen Sie sich wie folgt:

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

Eine andere Möglichkeit besteht darin, den Inhalt dieses Ordners mit tar:

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

Dann verschiebe es eine beliebige andere Datei. Ich empfehle diesen Schritt auch, 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, dem Sie nicht gehören, stellen Sie sicher, dass Sie den Befehl mit dem Befehl sudo nach der gewünschten Option voranstellen.

sudo tar -cvzpf backup.tar.gz /var/www/
    
Dimitris Theodoridis 19.03.2013 05:27
quelle
2

Sure rsync funktioniert zwar, aber dies funktioniert möglicherweise auch für Rechner, die rsync nicht unterstützen (d. h. in cpanel, wobei rsync nicht standardmäßig installiert ist).

Was ist mit der Verwendung:

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

Entfernen Sie dann ggf. das Verzeichnis backup

Hinweis1: Sie müssen cd vor dem Ausführen von backup

im Verzeichnis cp -R --parents ... speichern

Hinweis2: Überprüfen Sie das Verzeichnis backupArchives , wenn Sie die neuen Dateien aus dem Backup erhalten haben.

    
Atillo Regner Rex 03.03.2017 08:45
quelle
1

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 beispielsweise mv foo/* bar ausführen, tritt der Fehler mv: directory not empty auf.

Meine Lösung besteht darin, Befehlszeilentools aufzugeben und zu einem GUI-Dateimanager zu wechseln, zum Beispiel dolphin. Wenn Sie foo in bar in delphin umbenennen, können Sie in den Zielordner schreiben und interaktiv nachfragen, ob vorhandene Dateien überschrieben werden sollen. Dadurch wird das Kopieren und Löschen vermieden, wodurch Ihre Zeit ohne eine einzige Codezeile gespart wird.

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

    
navigaid 12.10.2016 11:22
quelle

Tags und Links