Ответы:
Ваш текущий скрипт использует только десятичное значение - это, очевидно, преобразуется в значение без начальных нулей.
Вы должны дополнить строку длиной до 4 символов, с ведущими нулями. Вы делаете это с помощью обратных кавычек, ``чтобы получить результат вызова printf printf %04d $j.
В результате у вас должна быть полная команда:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Источник: StackOverflow: Bash - Заполнение нулей в строке
(Очевидно, также посмотрите дальнейшие ответы на этот вопрос, если вы хотите более глубокое решение, но это определенно работает отлично для этого варианта использования.)
Используя bash, ваш лучший вариант:
mkdir {0001..0666}
создать dir с именем 0001to 0666(с нулевым заполнением).
Если вы хотите , каталоги с именем prefix0001suffix, prefix0002suffix... то:
mkdir prefix{0001..0666}suffix
Сделаю.
Если вы хотите только нечетные номера имен каталогов
mkdir {0001..0666..2}
и так далее ... См. Расширение скобок в bashсправочном руководстве .
Как указывает FEichinger, вам нужно заранее знать количество каталогов. Если вам нужно решение, близкое к вашему, но действительно безопасное и использующее более современные идиомы bash:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done