Je veux créer un répertoire de telle manière que je dois étiqueter les répertoires de a
à z
. À l'intérieur de chacun de ces répertoires, je dois créer des sous-répertoires afin qu'ils soient étiquetés comme aa
, ab
etc.
Ainsi, par exemple, pour le répertoire m
, mes sous-répertoires seront étiquetés comme ma
, mb
jusqu'à mz
.
shell-script
mkdir
Ramesh
la source
la source
/usr/share/terminfo
avec [az] et j'utilisais cette sortie. Linux est assez clairsemé sur ce compte, utilisé pour être des entrées pour tous les caractères majuscules et minuscules plus les chiffres.Réponses:
Essayer:
Bash étendra
XXX{a..z}
versXXXa
,XXXb
et ainsi de suite. Vous n'avez pas besoin de la boucle intérieure que vous avez.Après ça:
la source
Donc, avec
bash
l'extension de l'alphabet, cela fonctionne: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:
... 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 labash
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:
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 simplementsh
les paramètres à l'invocation, et au-dessus avecset ${positionals}
. Maisprintf
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 toutefor
la sortie d'une boucle sur le tube de la même manièredone >file
le diffuserait dans un fichier - n'ouvrant et fermant le fichier de sortie qu'une seule fois pour lafor...done
construction entière .la source
À partir de là , j'ai fini par créer un script comme celui-ci. Cependant, si j'obtiens une solution élégante, je l'accepterai comme réponse.
la source
/home/ramesh/"$x"/"$x$y"
,/home/ramesh/"$x/$x$y"
ou"/home/ramesh/$x/$x$y"
- ils sont tous équivalents.Dans
Perl
:File::Path
est le module principal depuisPerl 5.001
.la source