Як зробити декілька каталогів одночасно в каталозі?


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}; зробіть тест на mkdir $ 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


5
О, це ефектно. Це набагато краща відповідь
Майкл Мрозек

1
Я цього не знав, чудова порада!
інвертувати

5
+1 для краси, +1 для стилю, +1 для rcrowley
Стефан

+500 щедрості від мене.
Джордж Chalhoub

Це круто! щойно використав це: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`

Хоча ви, звичайно, можете робити каталоги від A до Z з утилітами оболонки:

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 $_ }'


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.