Respuestas:
Su script actual usa solo un valor decimal, esto obviamente se traduce en el valor sin ceros a la izquierda.
Tendría que rellenar la cadena a la longitud de 4 caracteres, con ceros a la izquierda. Para ello, utilice las teclas ``de retroceso para obtener el resultado de la llamada printf printf %04d $j.
Como resultado, debe tener el comando completo:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Fuente: StackOverflow: bash - Relleno de ceros en una cadena
(Obviamente, también vea las respuestas adicionales a esa pregunta, si desea una solución más profunda, pero esto definitivamente funciona perfectamente para este caso de uso).
Usando bash, tu mejor opción es:
mkdir {0001..0666}
para crear directorios con nombre 0001a 0666(con cero relleno).
Si quieres directorios llamado prefix0001suffix, prefix0002suffix... a continuación:
mkdir prefix{0001..0666}suffix
lo haré
Si solo desea nombres de directorio de números impares
mkdir {0001..0666..2}
y así sucesivamente ... Consulte Expansión de llaves en el bashmanual de referencia .
Como señala FEichinger, debe saber de antemano el número de directorios. Si quieres una solución que sea cercana a la tuya, pero realmente segura y que use un modismo de bash más moderno:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done