Jak utworzyć wiele katalogów jednocześnie w katalogu?

25

Wiem z mkdir, że mogę zrobić, mkdir A B C D E Faby utworzyć każdy katalog. Jak utworzyć katalogi AZ lub 1-100 bez wpisywania każdej litery lub cyfry?

Steve Burdine
źródło

Odpowiedzi:

18

Prawdopodobnie najłatwiej jest po prostu użyć forpętli:

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

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

Potrzebujesz jednak przynajmniej bash 3.0; w przeciwnym razie musisz użyć czegoś takiegoseq

Michał Mrożek
źródło
1
Michael dzięki! będąc ciekawym, spróbowałem również dodać test przed $ char dla char w {A..Z}; zrób test mkdir $ char zrobiony, który dał mi test katalogów [AZ], zawsze dobrze się uczy
Steve Burdine
Jedną z rzeczy, o których należy pamiętać, jest sposób sortowania nazw plików podczas ich wyświetlania na liście lub używania ich z symbolami wieloznacznymi, takimi jak *. „11” posortuje się przed „2”. Można tego uniknąć, jeśli wszystkie liczby będą tej samej długości z wiodącymi zerami. Dennis Williams pokazuje, jak to zrobić w bash 4, ale możesz napisać skrypt, aby to zrobić, jeśli nie masz bash 4.
Joe
71

{}Składni atakujących składnia związane z forkonstruktu.

mkdir {A..Z}

sam w sobie wystarcza.

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

rcrowley
źródło
5
Och, to spektakularne. To o wiele lepsza odpowiedź
Michał Mrożek
1
Nie wiedziałem tego, świetna wskazówka!
inwertowanie
5
+1 za piękno, +1 za styl, +1 za rcrowley
Stefan
+500 nagród ode mnie.
George Chalhoub,
To jest niesamowite! właśnie go użyłem:mkdir -p ./logs-{1..5}
Pranav 웃
8

Możesz także wykonywać bardziej złożone kombinacje (wypróbuj je echozamiast, mkdiraby później nie było czyszczenia):

Porównać

$ 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

do

$ 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

Jeśli masz Bash 4, spróbuj

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

i

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009
Wstrzymano do odwołania.
źródło
7

W systemie Linux można generować sekwencje cyfr za pomocą polecenia „seq”, ale nie ma to zastosowania we wszystkich systemach uniksowych. Na przykład, aby wygenerować katalogi od 1 do 100:

mkdir `seq 1 100`

Chociaż z pewnością możesz tworzyć katalogi od A do Z za pomocą narzędzi powłoki:

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

Korzystanie z Perla jest prawdopodobnie o wiele mniej brzydkie:

perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'
dhd
źródło
-1

mkdir direct{1..3}spowoduje mkdir direct1 direct2 direct3i tak dalej. To samo dotyczy{a..z}

Lionel AVOGNON
źródło
2
jest to powtórzenie trzech istniejących odpowiedzi i tej, którą już skomentowałem
Jeff Schaller
-2

mkdir {A..Z} mkdir {0..100} mkdir test_ {A..Z} i tak dalej.

Avognon Lionel
źródło
Nie rozumiem
Pierre.Vriens
1
zostało
Jeff Schaller