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

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

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

Спасибо!

9
задан 17 February 2014 в 09:48

2 ответа

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

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

В результате вы должны получить полную команду:

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

Источник: StackOverflow: bash - Заполнение нулями в строке

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

0
ответ дан 17 February 2014 в 09:48

Лучше всего использовать bash:

mkdir {0001..0666}

для создания каталогов с именами от 0001 до 0666 (с нулевым заполнением).

Если вы хотите каталоги с именами prefix0001suffix, prefix0002suffix, ..., тогда:

mkdir prefix{0001..0666}suffix

подойдет.

Если вам нужны только нечетные имена каталогов

mkdir {0001..0666..2}

и т. Д. См. Расширение скобок в справочном руководстве bash . [ 1116]

Как указывает FEichinger, вам нужно заранее знать количество каталогов. Если вам нужно решение, близкое к вашему, но действительно безопасное и использующее более современные идиомы bash:

for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done
0
ответ дан 17 February 2014 в 09:48

Другие вопросы по тегам:

Похожие вопросы: