Risposte:
Lo script corrente utilizza solo un valore decimale - questo ovviamente si traduce nel valore senza zeri iniziali.
Dovresti riempire la stringa con una lunghezza di 4 caratteri, con zeri iniziali. A tale scopo, utilizzare i backtick ``per ottenere il risultato della chiamata printf printf %04d $j.
Di conseguenza, dovresti avere il comando completo:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Fonte: StackOverflow: bash - Riempi gli zeri in una stringa
(Ovviamente vedi anche le ulteriori risposte a questa domanda, se vuoi una soluzione più approfondita, ma questo sicuramente funziona perfettamente per questo caso d'uso.)
Usando bash, l'opzione migliore è:
mkdir {0001..0666}
per creare dir con nome 0001a 0666(con zero padding).
Se si desidera che le directory di nome prefix0001suffix, prefix0002suffix... allora:
mkdir prefix{0001..0666}suffix
andrà bene.
Se vuoi solo nomi di directory con numeri dispari
mkdir {0001..0666..2}
e così via ... Vedi Brace Expansion nel bashmanuale di riferimento .
Come sottolinea FEichinger, è necessario conoscere in anticipo il numero di directory. Se vuoi una soluzione vicina alla tua, ma davvero sicura e usando un linguaggio bash più moderno:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done