Bagaimana cara membuat banyak direktori sekaligus dalam direktori?

25

Saya tahu dengan mkdir yang bisa saya lakukan mkdir A B C D E Funtuk membuat setiap direktori. Bagaimana cara membuat direktori AZ atau 1-100 tanpa mengetik di setiap huruf atau angka?

Steve Burdine
sumber

Jawaban:

18

Mungkin paling mudah menggunakan forloop:

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

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

Anda membutuhkan setidaknya bash 3.0; jika tidak, Anda harus menggunakan sesuatu sepertiseq

Michael Mrozek
sumber
1
Michael terima kasih! penasaran saya juga mencobanya menambahkan tes di depan $ char for char di {A..Z}; do mkdir test $ char done yang memberi saya tes direktori [AZ], selalu bagus untuk dipelajari
Steve Burdine
Satu hal yang perlu diingat adalah bagaimana nama file Anda akan diurutkan ketika Anda mendaftar atau menggunakannya dengan wildcard seperti *. '11' akan mengurutkan sebelum '2'. Ini dapat dihindari jika Anda mengatur agar semua angka memiliki panjang yang sama dengan nol di depan. Dennis Williams menunjukkan cara melakukannya di bash 4, tetapi Anda dapat membuat kode skrip untuk melakukannya jika Anda tidak memiliki bash 4.
Joe
71

The {}sintaks sintaks Bash tidak terikat dengan formembangun.

mkdir {A..Z}

sudah cukup dengan sendirinya.

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

rcrowley
sumber
5
Oh, itu spektakuler. Ini adalah jawaban yang jauh lebih baik
Michael Mrozek
1
Saya tidak tahu ini, tip yang bagus!
invert
5
+1 untuk kecantikan, +1 untuk gaya, +1 untuk rcrowley
Stefan
+500 hadiah dari saya.
George Chalhoub
Ini luar biasa! hanya menggunakannya:mkdir -p ./logs-{1..5}
Pranav 웃
8

Anda juga dapat melakukan kombinasi yang lebih kompleks (coba dengan ini echoalih - alih mkdiragar tidak ada pembersihan setelahnya):

Membandingkan

$ 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

untuk

$ 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

Jika Anda memiliki Bash 4, coba

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

dan

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009
Dijeda sampai pemberitahuan lebih lanjut.
sumber
7

Di Linux Anda dapat menghasilkan urutan angka dengan perintah "seq", tetapi ini tidak ada pada semua sistem Unix. Misalnya untuk menghasilkan direktori dari 1 hingga 100:

mkdir `seq 1 100`

Meskipun Anda tentu saja dapat membuat direktori A hingga Z dengan utilitas shell:

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

Mungkin jauh lebih jelek untuk menggunakan Perl:

perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'
dhd
sumber
-1

mkdir direct{1..3}akan menghasilkan mkdir direct1 direct2 direct3dan seterusnya. Sama untuk{a..z}

Lionel AVOGNON
sumber
2
ini adalah pengulangan dari tiga jawaban yang ada dan satu yang sudah saya komentari
Jeff Schaller
-2

mkdir {A..Z} mkdir {0..100} mkdir test_ {A..Z} dan seterusnya.

Avognon Lionel
sumber
Saya tidak mengerti
Pierre.Vriens
1
ini sudah dibahas
Jeff Schaller