Erstellen Sie einen neuen leeren Verzeichnisbaum aus einem vorhandenen Baum mit Dateien

Erstellen Sie einen neuen leeren Verzeichnisbaum aus einem vorhandenen Baum mit Dateien

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 cpdie 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

-dfilistet nur Verzeichnisse auf, druckt den vollständigen Pfad für jeden Namen, lässt tree die Einrückungszeilen nicht drucken,

--noreportUnterlä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)

verwandte Informationen