No script bash a seguir, se j = 0000, como devo alterar o script bash a seguir para criar diretórios denominados 0001, 0002, ...? Na verdade, ele faz dirs nomeados 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
Obrigado!
Seu script atual usa apenas um valor decimal - isso obviamente se traduz no valor sem zeros à esquerda.
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 - preenchimento de zeros em uma string
(Obviamente, veja também as respostas adicionais para essa pergunta, se você quiser uma solução mais aprofundada, mas isso definitivamente funciona perfeitamente para este caso de uso.)
Usando o bash, sua melhor opção é:
mkdir {0001..0666}
para criar dirs com nome 0001
para 0666
(com preenchimento zero).
Se você quiser diretórios chamado prefix0001suffix
, prefix0002suffix
... então:
mkdir prefix{0001..0666}suffix
vai fazer.
Se você deseja apenas nomes de diretório com números ímpares
mkdir {0001..0666..2}
e assim por diante ... Consulte Expansão de braçadeira no bash
manual de referência .
Como destaca FEichinger, você precisa saber com antecedência o número de diretórios. Se você deseja uma solução próxima à sua, mas realmente segura e usando o idioma bash mais moderno:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done