Ich möchte den Inhalt eines Verzeichnisses innerhalb eines anderen Verzeichnisses mit denselben Ordnern verschieben.
Hier ist ein Beispiel:
Ich habe ./backup
das mit den Verzeichnissen base
und test
. Jetzt möchte ich diese Verzeichnisse nach verschieben ./backupArchives
.
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, zu verwenden --force
, aber ohne Erfolg. 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.
Antwort1
Obwohl dies in der Manpage nicht dokumentiert ist, mv
wird die Umbenennung eines Verzeichnisses in ein anderes Verzeichnis abgelehnt, wenn das Zielverzeichnis Dateien enthält. Das ist in Ihrem Fall eine gute Sache, da Sie wahrscheinlichverschmelzenden Inhalt der Quelle in das Ziel, was mv
nicht funktioniert.
Verwenden Sie rsync -a backup/ backupArchives/
stattdessen. Danach rm -rf backup/*
.
Anstatt zu verwenden rsync
, können Sie auch das klassische
(cd backup && tar c .) | (cd backupArchives && tar xf -)
wodurch Sie mehr Geek-Punkte erhalten.
Antwort2
Schnell und einfach, wenn Sie wissen, was Sie tun:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
Antwort3
Nach dem Verzeichnis, das Sie verschieben möchten, müssen Sie *
(steht für einen beliebigen Text oder eine beliebige Zahl) angeben. Beispiel:
mv /var/www/* /recovery/wwwrecovery/
das ist alles. Wenn Sie Dateien verschieben, verschieben Sie sie wie folgt:
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
Verschieben Sie es dann in eine andere Datei. Ich empfehle diesen Schritt auch, da Tar es 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, der Ihnen nicht gehört, stellen Sie Ihrem Befehl unbedingt den sudo
Befehl nach der von Ihnen verwendeten Option voran.
sudo tar -cvzpf backup.tar.gz /var/www/
Antwort4
Funktioniert auf jeden Fall rsync
, aber es funktioniert möglicherweise auch auf Rechnern, die dies nicht unterstützen rsync
(z. B. in cPanel, wo rsync nicht standardmäßig installiert ist).
Wie wäre es mit:
cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
backup
Entfernen Sie dann ggf. das Verzeichnis
Hinweis 1: Sie müssen cd
in das backup
Verzeichnis, bevor Sie dencp -R --parents ...
Hinweis 2: Überprüfen Sie das backupArchives
Verzeichnis noch einmal, wenn Sie die neuen Dateien aus der Sicherung erhalten haben.