Entonces, con bash
la expansión del alfabeto, esto funciona:
set {a..z}
for a do printf "./$a/$a%s\n" "$@"
done | xargs mkdir -p
Y si solo escribe el alfabeto una vez en la primera línea, el mismo concepto debería ser portátil para cualquier shell. Hay otras formas de llegar a la línea establecida si no desea escribirla como:
seq -sP32P 97 123|dc
a b c d e f g h i j k l m n o p q r s t u v w x y z
... por ejemplo, funciona en un entorno local ASCII. Por lo tanto, podría hacer set $(seq -sP32P 97 123|dc)
o cualquier otro comando que le proporcionaría una $IFS
lista separada de los argumentos que necesita, pero, quiero decir, probablemente sea mejor usar la bash
cosa o escribirla.
De todos modos, creo que esa es la forma en que lo haría solo porque solo invoca mkdir
con la frecuencia necesaria.
Y solo para demostrar cómo funciona, aquí hay una pequeña salida de depuración de un conjunto más pequeño:
sh -cx 'for n do printf "./$n/$n%s\n" "$@"; done|cat' -- arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg1/arg1%s\n' arg1 arg2 arg3
+ cat
+ for n in '"$@"'
+ printf './arg2/arg2%s\n' arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg3/arg3%s\n' arg1 arg2 arg3
./arg1/arg1arg1
./arg1/arg1arg2
./arg1/arg1arg3
./arg2/arg2arg1
./arg2/arg2arg2
./arg2/arg2arg3
./arg3/arg3arg1
./arg3/arg3arg2
./arg3/arg3arg3
Como puede ver, los for
únicos bucles una vez por índice de matriz de parámetros posicionales, que establezco aquí simplemente entregando sh
los parámetros en la invocación, y arriba con set ${positionals}
. Pero printf
recibe la misma matriz en su lista de argumentos para cada iteración y aplica su cadena de formato a cada uno de sus argumentos, por lo que obtiene la apariencia de recursión sin ninguna recursión innecesaria.
Y agregar el done|command
flujo de transmisión de toda for
la salida de un bucle sobre la tubería de la misma manera done >file
lo transmitiría todo en un archivo, solo abriendo y cerrando el archivo de salida una vez para toda la for...done
construcción.