Как сделать несколько каталогов одновременно в одном каталоге?

25

Я знаю, с помощью mkdir я могу mkdir A B C D E Fсоздать каждый каталог. Как создать каталоги AZ или 1-100 без ввода каждой буквы или цифры?

Стив Бурдин
источник

Ответы:

18

Вероятно, проще всего использовать forцикл:

for char in {A..Z}; do
    mkdir $char
done

for num in {1..100}; do
    mkdir $num
done

Вам нужен хотя бы bash 3.0; в противном случае вы должны использовать что-то вродеseq

Михаил Мрозек
источник
1
Майкл спасибо! из любопытства я также попробовал добавить тест перед $ char для char в {A..Z}; do mkdir test $ char сделано, что дало мне возможность проверить каталоги [AZ], всегда полезно учиться
Стив Бурдин
Нужно иметь в виду, как будут сортироваться имена ваших файлов, когда вы перечисляете их или используете с подстановочными знаками, такими как *. «11» будет сортировать перед «2». Этого можно избежать, если вы сделаете так, чтобы все числа были одинаковой длины с ведущими нулями. Деннис Уильямс показывает, как это сделать в bash 4, но вы можете написать свой сценарий, чтобы сделать это, если у вас нет bash 4.
Джо
71

{}Синтаксис Bash синтаксис не привязан к forконструкции.

mkdir {A..Z}

достаточно само по себе.

http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion

rcrowley
источник
5
О, это впечатляюще. Это гораздо лучший ответ
Михаил Мрозек
1
Я не знал этого, отличный совет!
инвертировать
5
+1 за красоту, +1 за стиль, +1 за Рокли
Стефан
+500 к награде от меня.
Джордж Чалхуб
Это круто! только что использовал:mkdir -p ./logs-{1..5}
Пранав 웃
8

Вы также можете делать более сложные комбинации (попробуйте их echoвместо, mkdirчтобы потом не было очистки):

сравнить

$ echo pre-{{F..G},{3..4},{m..n}}-post
pre-F-post pre-G-post pre-3-post pre-4-post pre-m-post pre-n-post

в

$ echo pre-{F..G}{3..4}{m..n}-post
pre-F3m-post pre-F3n-post pre-F4m-post pre-F4n-post pre-G3m-post pre-G3n-post
pre-G4m-post pre-G4n-post

Если у вас Bash 4, попробуйте

$ echo file{0001..10}
file0001 file0002 file0003 file0004 file0005 file0006 file0007 file0008 file0009
file0010

а также

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009
Приостановлено до дальнейшего уведомления.
источник
7

В Linux вы можете генерировать последовательности цифр с помощью команды "seq", но это существует не во всех системах Unix. Например, для создания каталогов от 1 до 100:

mkdir `seq 1 100`

Хотя вы, безусловно, можете создавать каталоги от А до Я с помощью утилит оболочки:

seq 65 90 \
    | while read foo; do printf "%b\n" `printf '\\\\x%x\n' $foo`; done \
    | xargs mkdir

Вероятно, гораздо менее уродливо просто использовать Perl:

perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'
DHD
источник
-1

mkdir direct{1..3}приведет к mkdir direct1 direct2 direct3и так далее. То же самое для{a..z}

Лайонел АВОГНОН
источник
2
это повторение трех существующих ответов и тот, который я уже прокомментировал
Джефф Шаллер