В следующем скрипте bash, если j = 0000, как мне изменить следующий скрипт bash, чтобы сделать каталоги с именами 0001, 0002, ...? На самом деле это делают DIRS по имени 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
Спасибо!
Ваш текущий скрипт использует только десятичное значение - это, очевидно, преобразуется в значение без начальных нулей.
Вы должны будете дополнить строку длиной 4 символа с ведущими нулями. Вы делаете это, используя backticks ``
, чтобы получить результат вызова printf printf %04d $j
.
В результате вы должны получить полную команду:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Источник: StackOverflow: bash - Заполнение нулями в строке
[ 118] (Очевидно, также посмотрите дальнейшие ответы на этот вопрос, если вы хотите более глубокое решение, но это определенно работает отлично для этого варианта использования.)
Лучше всего использовать 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