
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 rsync
die Verzeichnisstruktur von /opt/local
in exakt dupliziert /opt/New
, ohne dass Dateien kopiert werden.
Die -a
Option ( --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/current
anstatt /opt/New
direkt „in“ zu schreiben.
Antwort2
POSIX-mäßig und unter der Annahme, dass Verzeichnisnamen keine Zeilenumbruchzeichen enthalten und $srcdir
absolute $dstdir
Pfade sind:
(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")
Einige pax
Implementierungen unterstützen das Abrufen von NUL-getrennten Listen von zu kopierenden Dateien mit einer -0
Option zum Zulassen von Dateinamen mit NULs:
(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")
( -print0
ist 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