Kann dieser mkdir-Befehl durch eine weitere Bash-Erweiterung vereinfacht werden?

Kann dieser mkdir-Befehl durch eine weitere Bash-Erweiterung vereinfacht werden?

Ich habe einen Befehl zum Generieren der folgenden Verzeichnisstruktur, die ich brauche:

./sites
./sites/domain_co_uk
./sites/domain_co_uk/php
./sites/domain_co_uk/cgi
./sites/domain_net
./sites/domain_net/cgi
./sites/domain_com

Der Befehl, der dies erstellt, lautet:

mkdir -p sites/{domain_com,domain_co_uk/{cgi,php},domain_net/cgi}

Ich frage mich, ob ich dies mit weiteren Klammern verschachteln kann, so dass dieDomain_und dascgiwerden im Befehl nicht wiederholt? Ich habe herumgespielt und es schien nicht möglich zu sein, aber ich habe es geschafft, es so zu ändern, dass sowohl die_de_DEund das_Netzhatte sowohl die CGI- als auch die PHP-Verzeichnisse, aber ich möchte kein PHP-Verzeichnis in _net.

Beim Lesen der Bash-Manpage ist mir aufgefallen, dass die Pfadnamenerweiterung nach der Klammernerweiterung erfolgt. Daher habe ich mich gefragt, ob ich etwas übersehen habe, das mir eine Vereinfachung des Befehls ermöglichen würde.

Ich bin froh, dass mein Befehl das tut, was er soll. Es geht hier eher um die Erweiterung meines Wissens.

Antwort1

Ihr Befehl enthält keine Pfadnamenerweiterung.

Sie können die Wiederholung des einen oder des anderen vermeiden, aber nicht von beidem –es sei dennDie zweite Erweiterung kann für alle Domänen, die durch die erste erweitert wurden, identisch gemacht werden. Erweiterungen zählen alle möglichen Kombinationen auf, {a,b,c}{1,2,3}werden beispielsweise immer auf 3×3 Zeichenfolgen (a1, a2, a3, b1, ...) erweitert und Sie können keinen unerwünschten Wert ausschließen.

Wenn also beide Domänen "cgi" hättenUnd"php"-Unterverzeichnisse, könnten Sie verwenden:

mkdir -p sites/{domain_com,domain_{co_uk,net}/{cgi,php}}

Beachten Sie, dass es bei der Klammernerweiterung egal ist, wohin sie erweitert wird, und dass sie nicht nur an Grenzen verwendet werden muss. Ihr ursprüngliches Beispiel könnte folgendermaßen umgeschrieben werden:

mkdir -p sites/domain_{co_uk/{php,cgi},net/cgi,com}

oder andersherum (um die Wiederholung von „cgi“ zu vermeiden):

mkdir -p sites/domain_{co_uk/php,{co_uk,net}/cgi,com}

Im Allgemeinen ist dies jedochvereinfacht nichtder Befehl (vielleicht nur im mathematischen Sinne) – erverkürztder Befehl, aber es wird tatsächlich komplexer zu verstehen. Hier ist eine bessere Version:

mkdir -p sites/domain_com
mkdir -p sites/domain_co_uk/{php,cgi}
mkdir -p sites/domain_net/cgi

verwandte Informationen