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?

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


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


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

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

-1

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.