So erstellen Sie eine Linux-Verzeichnis- und Unterverzeichnisstruktur ohne Dateien daraus

So erstellen Sie eine Linux-Verzeichnis- und Unterverzeichnisstruktur ohne Dateien daraus

Ich habe die Anforderung, ein Spiegelbild der vorhandenen Linux-Verzeichnisse und Unterverzeichnisse der Ordner wie unten zu erstellen.

wir haben das Verzeichnis „/opt/current“, das eine weitere Ebene mit 20 Unterverzeichnissen und eine weitere Ebene mit 50 Unterverzeichnissen hat und so weiter … noch ein paar tiefere Ebenen für Unterverzeichnisse und insgesamt haben wir 1000 Verzeichnisse vom übergeordneten zum untergeordneten Verzeichnis. /opt/current ist auf dem Oracle ZFS-Gerät gemountet.

So erstellen Sie eine exakte Spiegelverzeichnis-/Unterverzeichnisstruktur am neuen Speicherort /opt/New (nicht manuell, sondern eins zu eins im Verzeichnis) und wenden Berechtigungen an. /opt/New wird auf einem anderen ZFS-Gerät gemountet.

Gibt es eine Möglichkeit/ein Skript, um im Pfad /opt/Neuer eine vollständige Verzeichnisstruktur vom übergeordneten zum untergeordneten Verzeichnis mit derselben Eigentümer-/Gruppen-/anderen Berechtigung wie im Pfad /opt/aktueller Pfad zu erstellen?

Danke, CG

Antwort1

rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New

Dadurch wird rsyncdie Verzeichnisstruktur von /opt/localin exakt dupliziert /opt/New, ohne dass Dateien kopiert werden.

Die -aOption ( --archive) stellt sicher, dass alle Berechtigungen usw. erhalten bleiben (diese Option impliziert auch eine rekursive Kopie) und -v( --verbose) gibt Ihnen einen Hinweis auf den Fortschritt des Befehls.

Mit --include='*/'schließen wir jedes beliebige Verzeichnis explizit in die Übertragung ein, mit schließen wir alles andere aus --exclude='*'. Die Reihenfolge dieser beiden Optionen auf der Kommandozeile ist dabei wichtig.

Auch das „ /am Ende von“ /opt/current/ist wichtig, denn ohne es wäre das Ergebnis „erstellen“ /opt/New/currentanstatt /opt/Newdirekt „in“ zu schreiben.

Antwort2

POSIX-mäßig und unter der Annahme, dass Verzeichnisnamen keine Zeilenumbruchzeichen enthalten und $srcdirabsolute $dstdirPfade sind:

(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")

Einige paxImplementierungen unterstützen das Abrufen von NUL-getrennten Listen von zu kopierenden Dateien mit einer -0Option zum Zulassen von Dateinamen mit NULs:

(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")

( -print0ist auch eine Nicht-POSIX-Erweiterung).

Antwort3

Alternativ zursync

find /opt/current -type d -print0 | cpio -0pma backup/dir/

Antwort4

Sie können ein Skript wie das folgende erstellen und in eine Datei einfügen:

-- Die Syntax des Bash-Skripts/KSH-Skripts muss je nach Shell geändert werden ----

find . -name "*"|while read line
do
        if [[ -d ${line} ]]
        then 
                echo ${line}
        fi
do

auf dem Server erstellen Sie die Datei

cat file |while read line
do
mkdir ${line}
done

verwandte Informationen