Como criar vários diretórios use o Bash

0

Eu quero criar dez pastas chamadas foo1java , foo2c , foo3python , etc.

Eu tentei isso, mas ele cria muitos diretórios:

mkdir foo{1..3}{java,c,python}

foo1c/     foo1python/  foo2java/    foo3c/     foo3python/
foo1java/  foo2c/       foo2python/  foo3java/

Quero apenas mapear os números para os idiomas: 1 to java , 2 to c , 3 to python , etc.

Como eu faria isso?

    
por HVNSweeting 07.04.2012 / 14:51

5 respostas

5
i=1; for j in java c python; do mkdir foo${i}${j}; i=$((i+1)); done

fornece diretórios

foo1java
foo2c
foo3python

Para adicionar mais idiomas, basta preencher a lista de palavras depois de python com entidades separadas por espaço. O contador inteiro será mantido.

Adição: "Bashier" (mas não melhor, então eu preferiria a solução acima, já que é mais portátil (mesmo que provavelmente não importe neste caso)):

list=(java c python); i=1; while [ $i -lt ${#list} ]; do mkdir foo${i}${list[i-1]}; let i++; done

Basta preencher a matriz list com mais entradas como antes.

    
por 07.04.2012 / 14:55
4

É um mapeamento estático, então calcule.

mkdir foo{1java,2c,3python}
    
por 07.04.2012 / 15:08
0

Outra maneira possível (bash)

  arr=(java c python); for((i = 1; i <= ${#arr[@]}; i++)); do mkdir foo${i}${arr[i-1]} ; done
    
por 07.04.2012 / 16:29
0

Sem loop ...

paste <( printf '%s\n' foo{1..3} ) \
      <( printf '%s\n' java c python ) |tr -d '\t' | xargs mkdir -p
    
por 07.04.2012 / 16:43
0

Isso pode funcionar para você:

parallel --xapply mkdir foo{1}{2} ::: {1..3} ::: {java,c,python}
    
por 09.04.2012 / 02:50

Tags