Donc, avec bashl'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 $IFSliste séparée des arguments dont vous avez besoin, mais, je veux dire, il vaut probablement mieux simplement utiliser la bashchose 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 mkdiraussi 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 forseules boucles une fois par index de tableau de paramètres positionnels, que j'ai défini ici en remettant simplement shles paramètres à l'invocation, et au-dessus avec set ${positionals}. Mais printfreç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|commandva diffuser toute forla sortie d'une boucle sur le tube de la même manière done >filele diffuserait dans un fichier - n'ouvrant et fermant le fichier de sortie qu'une seule fois pour la for...doneconstruction entière .