Сделайте каталог с именем 0001 вместо 1 в цикле сценария bash

10

В следующем скрипте bash, если j = 0000, как мне изменить следующий скрипт bash, чтобы сделать каталоги с именами 0001, 0002, ...? Собственно это делают режиссеры по имени 1, 2, 3

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

Спасибо!

Marcello
источник

Ответы:

13

Ваш текущий скрипт использует только десятичное значение - это, очевидно, преобразуется в значение без начальных нулей.

Вы должны дополнить строку длиной до 4 символов, с ведущими нулями. Вы делаете это с помощью обратных кавычек, ``чтобы получить результат вызова printf printf %04d $j.

В результате у вас должна быть полная команда:

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

Источник: StackOverflow: Bash - Заполнение нулей в строке

(Очевидно, также посмотрите дальнейшие ответы на этот вопрос, если вы хотите более глубокое решение, но это определенно работает отлично для этого варианта использования.)

user98085
источник
5

Используя 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
gniourf_gniourf
источник
Это полезно только для ранее известного количества каталогов, которые будут созданы. Обычно при использовании нумерованных каталогов вы находитесь в динамическом контексте - это означает, что он должен определять количество во время выполнения и, следовательно, все еще нуждается в заполнении строк. Зависит от конкретного варианта использования, хотя.
user98085
@ FEichinger Правильно! сообщение отредактировано соответственно.
gniourf_gniourf