Quero criar um diretório de forma que precise rotular os diretórios de a
para z
. Dentro de cada um desses diretórios, eu preciso criar sub-diretórios para que eles sejam rotulados como aa
, ab
etc.
Então, por exemplo, para o diretório m
, os meus sub-diretórios serão marcados como ma
, mb
até mz
.
shell-script
mkdir
Ramesh
fonte
fonte
/usr/share/terminfo
com [az] e usaria essa saída. O Linux é bastante escasso nessa contagem, costumava ser entradas para todos os caracteres maiúsculos e minúsculos, além dos dígitos.Respostas:
Experimentar:
O Bash se expandirá
XXX{a..z}
paraXXXa
,XXXb
e assim por diante. Não há necessidade do loop interno que você possui.Depois disso:
fonte
Então, com
bash
a expansão do alfabeto, isso funciona:E se você digitar o alfabeto uma vez na primeira linha, o mesmo conceito deve ser portátil para qualquer shell. Existem outras maneiras de chegar à linha definida, se você não quiser digitá-la como:
... por exemplo, trabalha em um código de idioma ASCII. Então você pode fazer
set $(seq -sP32P 97 123|dc)
ou qualquer outro comando que lhe forneça uma$IFS
lista separada dos argumentos de que você precisa, mas, quero dizer, provavelmente é melhor apenas usar abash
coisa ou digitá-la.Enfim, acho que é assim que eu faria, apenas porque invoca
mkdir
quantas vezes for necessário.E apenas para demonstrar como funciona, aqui está uma pequena saída de depuração de um conjunto menor:
Como você pode ver, os
for
únicos loops uma vez por índice de matriz de parâmetros posicionais, que eu defini aqui simplesmente entregandosh
os parâmetros na invocação e acima comset ${positionals}
. Masprintf
recebe a mesma matriz em sua lista de argumentos para cada iteração e aplica sua cadeia de formatação a cada um de seus argumentos, para obter a aparência de recursão sem nenhuma recursão desnecessária.E adicionar o
done|command
fluxo de todafor
a saída de um loop sobre o canal da mesma maneiradone >file
transmitiria tudo em um arquivo - apenas abrindo e fechando o arquivo de saída uma vez para toda afor...done
construção.fonte
A partir daqui , acabei criando um script como este. No entanto, se eu conseguir uma solução elegante, aceitarei como resposta.
fonte
/home/ramesh/"$x"/"$x$y"
,/home/ramesh/"$x/$x$y"
ou"/home/ramesh/$x/$x$y"
- todos são equivalentes.Em
Perl
:File::Path
é o módulo principal desde entãoPerl 5.001
.fonte