
Tengo un comando para generar la siguiente estructura de directorios que necesito:
./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
El comando que crea esto es:
mkdir -p sites/{domain_com,domain_co_uk/{cgi,php},domain_net/cgi}
Lo que me pregunto es si puedo anidar esto con más llaves para que eldominio_y elcgi¿No se repiten en el comando? Estuve trasteando y no me pareció posible, sí logré cambiarlo para que tanto el_co_uky el_netoTenía los directorios cgi y php, pero no quiero un directorio php en _net.
Al leer la página de manual de bash, noté que la expansión del nombre de ruta tiene lugar después de la expansión de la llave, así que me pregunté si me había perdido algo que me permitiera simplificar el comando.
Estoy feliz de que el comando que tengo haga lo que necesita, esta es más una situación de expansión del conocimiento.
Respuesta1
No hay ninguna expansión de nombre de ruta en su comando.
Puedes evitar repetir uno u otro, pero no ambos –a menos quela segunda expansión se puede hacer idéntica para todos los dominios ampliados por la primera. Las expansiones enumeran todas las combinaciones posibles, por ejemplo, {a,b,c}{1,2,3}
siempre se expandirán a cadenas de 3×3 (a1, a2, a3, b1, ...) y no puede hacer que excluya un valor no deseado.
Entonces, si ambos dominios tuvieran "cgi"ysubdirectorios "php", podrías usar:
mkdir -p sites/{domain_com,domain_{co_uk,net}/{cgi,php}}
Tenga en cuenta que a la expansión de llaves no le importa hacia dónde se expande y no es necesario usarla solo en los límites. Su ejemplo original podría reescribirse como:
mkdir -p sites/domain_{co_uk/{php,cgi},net/cgi,com}
o volteándolo al revés (para evitar repetir 'cgi'):
mkdir -p sites/domain_{co_uk/php,{co_uk,net}/cgi,com}
Aunque en general estono simplificael comando (quizás sólo en el sentido matemático): sóloacortael comando, pero en realidad se vuelve más complejo de entender. Aquí hay una versión mejor:
mkdir -p sites/domain_com
mkdir -p sites/domain_co_uk/{php,cgi}
mkdir -p sites/domain_net/cgi