Cria o diretório denominado 0001 em vez de 1 em um loop de script bash

8

No seguinte script bash se j = 0000 como eu tenho que mudar o seguinte script bash para fazer dirs chamadas 0001, 0002, ...? Na verdade, faz dirs chamado 1, 2, 3

for i in *.jpg; do let j+=1 ; mkdir $j ; done

Obrigado!

    
por Marcello 19.12.2012 / 12:54

2 respostas

10

Seu script atual usa apenas um valor decimal - isso obviamente se traduz no valor sem zeros iniciais.

Você teria que preencher a string com o comprimento de 4 caracteres, com zeros à esquerda. Você faz isso usando backticks '' para obter o resultado da chamada printf printf %04d $j .

Como resultado, você deve ter o comando completo:

for i in *.jpg; do let j+=1; mkdir 'printf %04d $j'; done

Fonte: StackOverflow: bash - Preenchendo zeros em uma string

(Obviamente, veja também as respostas adicionais para essa pergunta, se você quiser uma solução mais profunda, mas isso definitivamente funciona perfeitamente para este caso de uso.)

    
por user98085 19.12.2012 / 13:00
4

Usando o bash, sua melhor opção é:

mkdir {0001..0666}

para criar diretórios com o nome 0001 to 0666 (com preenchimento zero).

Se você quiser diretórios com o nome prefix0001suffix , prefix0002suffix , ... então:

mkdir prefix{0001..0666}suffix

fará.

Se você quiser apenas nomes de diretórios com números ímpares

mkdir {0001..0666..2}

e assim por diante ... Veja Expansão de Brace em o manual de referência bash .

Como FEichinger aponta, você precisa saber antecipadamente o número de diretórios. Se você quer uma solução próxima à sua, mas realmente segura e usando uma linguagem de bash mais moderna:

for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done
    
por gniourf_gniourf 19.12.2012 / 19:24

Tags