
Ich habe einen großen Verzeichnisbaum mit vielen Dateien.
Ich möchte die Verzeichnisstruktur an einem neuen Ort neu erstellen, aber nur die Verzeichnisse, nicht die Dateien.
Ich habe cp
die Manpage von geprüft, finde aber kein Argument, das weiterhilft.
Antwort1
rsync -av -f"+ */" -f"- *" /.../SOURCE /.../DESTINATION
Antwort2
find . -type d -exec mkdir -p ~/to/{} \;
Entnommen aus der Antwort von @whitequark auf diese Frage:Verzeichnisstruktur kopieren, ohne Dateien zu kopieren, unter Mac OS X
Antwort3
Ein anderer Ansatz ist die Verwendung von tree
, das ziemlich praktisch ist und das Navigieren in Verzeichnisbäumen auf der Grundlage seiner leistungsstarken Optionen ermöglicht. Es gibt Optionen für nur Verzeichnisse, leere Verzeichnisse ausschließen, Namen mit Muster ausschließen, nur Namen mit Muster einschließen usw. Schauen Sie sich anman tree
Vorteil: Sie können die Liste bearbeiten oder überprüfen, oder wenn Sie viel Skripting betreiben und häufig einen Stapel leerer Verzeichnisse erstellen
Ansatz: Erstellen Sie eine Liste von Verzeichnissen mit tree
, verwenden Sie diese Liste als Argumenteingabe fürmkdir
tree -dfi --noreport > some_dir_file.txt
-dfi
listet nur Verzeichnisse auf, druckt den vollständigen Pfad für jeden Namen, lässt tree die Einrückungszeilen nicht drucken,
--noreport
Unterlässt das Drucken des Datei- und Verzeichnisberichts am Ende der Baumliste, damit die Ausgabedatei keinen Ballast enthält
Gehen Sie dann zum Ziel, wo Sie die leeren Verzeichnisse haben möchten, und führen Sie aus
xargs mkdir < some_dir_file.txt
Antwort4
Habe dies gefunden, da ich auf ein ähnliches Bedürfnis gestoßen bin. Mit einer ausreichend neuen Version von rsync ist das Ihre beste Wahl.
Wenn Sie keine aktuelle Version von rsync haben, funktioniert Folgendes:
find path/to/source -type -d -exec mkdir path/to/dest/'{}' \; -exec chown --reference='{}' path/to/dest/'{}' \; -exec chmod --reference='{}' path/to/dest/'{}' \;
(Eine Variante hiervon kann zur Berechtigungsspiegelung verwendet werden)