Donc, avec bash
l'extension de l'alphabet, cela fonctionne:
set {a..z}
for a do printf "./$a/$a%s\n" "$@"
done | xargs mkdir -p
Et si vous tapez juste l'alphabet une fois dans la première ligne, le même concept devrait être portable sur n'importe quel shell. Il existe d'autres façons d'arriver à la ligne définie si vous ne voulez pas la taper comme:
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
... par exemple, fonctionne dans un environnement local ASCII. Vous pouvez donc faire set $(seq -sP32P 97 123|dc)
ou n'importe quelle autre commande qui vous obtiendrait une $IFS
liste séparée des arguments dont vous avez besoin, mais, je veux dire, il vaut probablement mieux simplement utiliser la bash
chose ou la taper.
Quoi qu'il en soit, je pense que c'est ainsi que je le ferais, ne serait-ce que parce qu'il n'appelle que mkdir
aussi souvent que nécessaire.
Et juste pour montrer comment cela fonctionne, voici une petite sortie de débogage d'un ensemble plus petit:
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
Comme vous pouvez le voir, les for
seules boucles une fois par index de tableau de paramètres positionnels, que j'ai défini ici en remettant simplement sh
les paramètres à l'invocation, et au-dessus avec set ${positionals}
. Mais printf
reçoit le même tableau dans sa liste d'arguments pour chaque itération et applique sa chaîne de format à chacun de ses arguments, ainsi vous obtenez l'apparence de récursivité sans aucune récursivité inutile.
Et l'ajout de done|command
va diffuser toute for
la sortie d'une boucle sur le tube de la même manière done >file
le diffuserait dans un fichier - n'ouvrant et fermant le fichier de sortie qu'une seule fois pour la for...done
construction entière .