Ich möchte einen Klon der Struktur unseres Multi-Terabyte-Dateiservers erstellen. Ich weiß, dass cp --parents eine Datei und ihre übergeordnete Struktur verschieben können, aber gibt es eine Möglichkeit, die Verzeichnisstruktur intakt zu kopieren?
Ich möchte auf ein Linux-System kopieren und unser Dateiserver ist dort CIFS-gemountet.
Antworten:
Sie könnten so etwas tun wie:
um dann die Liste der Verzeichnisse zu erstellen
um die Verzeichnisse am Ziel zu erstellen.
quelle
find . -type d -print0 >dirs.txt
undxargs -0 mkdir -p <dirs.txt
. Dies führt dazu, dass beide Befehle Nullen als Trennzeichen anstelle von Leerzeichen verwenden.xargs
kann die maximale Befehlslänge des Systems überschreiten, wenn Sie mit Bestellungen von Hunderten oder Tausenden beginnen. Verwenden Sie diese Option daher mit Vorsicht. (Finden Sie die Befehlslängenbeschränkung mitgetconf ARG_MAX
.) Bei vielen Verzeichnissen müssen Sie möglicherweise ein Skript schreiben, um stattdessen die Ausgabe zu durchlaufen.quelle
rsync
Lösung von Chen Levy in dieser SO-Frage zu beantworten--
ist ein Standard-Terminator für GNU-Dienstprogrammoptionen. Es bedeutet "hey mkdir, jedes Argument danach ist kein Flag, also behandeln Sie es als Dateiargument, auch wenn es mit einem '-' Zeichen beginnt."Hier ist eine einfache Lösung mit rsync:
Ich habe diese Lösung dort gefunden
quelle
rsync -a --include '*/' --exclude '*' "$source" "$target"
Ich weiß nicht, ob Sie nach einer Lösung für Linux suchen. Wenn ja, können Sie Folgendes versuchen:
quelle
Dadurch werden die Verzeichnisse und Dateiattribute kopiert, nicht jedoch die Dateidaten:
Dann können Sie die Dateiattribute löschen, wenn Sie nicht daran interessiert sind:
quelle
Die folgende Lösung hat in verschiedenen Umgebungen für mich gut funktioniert:
quelle
Das funktioniert:
Ersetzen Sie einfach SOURCE_DIR und DEST_DIR.
quelle
Dies löst sogar das Problem mit Leerzeichen:
Im Original- / Quellverzeichnis:
Erstellen Sie es dann im neu erstellten Verzeichnis neu:
quelle
Ersatz
target_dir
undsource_dir
mit den entsprechenden Werten:Getestet unter OSX + Ubuntu.
quelle
Ein Python-Skript von Sergiy Kolodyazhnyy, das auf Nur Ordner kopieren, keine Dateien? ::
oder aus der Shell:
Zu Ihrer Information:
quelle
Ein anderer Ansatz ist die Verwendung des sehr
tree
praktischen und das Navigieren in Verzeichnisbäumen basierend auf seinen starken Optionen. Es gibt Optionen nur für Verzeichnisse, leere Verzeichnisse ausschließen, Namen mit Muster ausschließen, nur Namen mit Muster einschließen usw. Auscheckenman tree
Vorteil : Sie können die Liste bearbeiten oder überprüfen oder wenn Sie häufig Skripte erstellen und häufig einen Stapel leerer Verzeichnisse erstellen
Vorgehensweise : Erstellen Sie eine Liste von Verzeichnissen mit
tree
und verwenden Sie diese Liste als Argumenteingabe fürmkdir
-dfi
listet nur Verzeichnisse auf, druckt den vollständigen Pfad für jeden Namen, lässt den Baum die Einrückungszeilen nicht drucken,--noreport
Lässt das Drucken des Datei- und Verzeichnisberichts am Ende der Baumliste aus, damit die Ausgabedatei keine Flusen enthältGehen Sie dann zu dem Ziel, an dem Sie die leeren Verzeichnisse haben möchten, und führen Sie sie aus
quelle
Kopieren Sie dir nur mit der zugehörigen Erlaubnis und dem zugehörigen Eigentum
quelle
1-Zeilen-Lösung:
quelle
Wenn Sie von einem Windows-Computer aus Zugriff erhalten, können Sie xcopy mit / T und / E verwenden, um nur die Ordnerstruktur zu kopieren (das / E enthält leere Ordner).
http://ss64.com/nt/xcopy.html
[BEARBEITEN!]
Dieser verwendet rsync, um die Verzeichnisstruktur neu zu erstellen, jedoch ohne die Dateien. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Könnte eigentlich besser sein :)
quelle
Hier ist eine Lösung in PHP, die:
Erstellen Sie eine Datei wie
syncDirs.php
mit diesem Inhalt:Führen Sie es als Benutzer mit genügend Rechten aus:
sudo php syncDirs.php /var/source /var/destination
quelle