Làm cách nào để tạo nhiều thư mục cùng một lúc trong một thư mục?


25

Tôi biết với mkdir tôi có thể làm mkdir A B C D E Fđể tạo từng thư mục. Làm cách nào để tạo thư mục AZ hoặc 1-100 mà không cần gõ từng chữ cái hoặc số?

Câu trả lời:


18

Có lẽ dễ nhất là chỉ sử dụng một forvòng lặp:

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

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

Bạn cần ít nhất bash 3.0 mặc dù; nếu không, bạn phải sử dụng một cái gì đó nhưseq


1
Michael cảm ơn! tò mò tôi cũng đã thử nó thêm thử nghiệm trước $ char cho char trong {A..Z}; làm bài kiểm tra mkdir $ char đã hoàn thành, điều đó đã cho tôi kiểm tra thư mục [AZ], luôn luôn tốt để học
Steve Burdine

Một lưu ý là cách sắp xếp tên tệp của bạn khi bạn liệt kê chúng hoặc sử dụng chúng với các ký tự đại diện như *. '11' sẽ sắp xếp trước '2'. Điều này có thể tránh được nếu bạn sắp xếp cho tất cả các số có cùng độ dài với các số 0 đứng đầu. Dennis Williams chỉ cho bạn cách làm điều đó trong bash 4, nhưng bạn có thể mã hóa kịch bản của mình để làm điều đó nếu bạn không có bash 4.
Joe

71

Các {}cú pháp là Bash cú pháp không gắn liền với forxây dựng.

mkdir {A..Z}

là đủ tất cả của chính nó.

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


5
Ồ, thật là ngoạn mục. Đây là một câu trả lời tốt hơn nhiều
Michael Mrozek

1
Tôi không biết điều này, mẹo tuyệt vời!
đảo ngược

5
+1 cho vẻ đẹp, +1 cho phong cách, +1 cho RCrowley
Stefan

+500 tiền thưởng từ tôi.
George Chalhoub

Điều này thật tuyệt! chỉ sử dụng nó:mkdir -p ./logs-{1..5}
Pranav

8

Bạn cũng có thể thực hiện các kết hợp phức tạp hơn (hãy thử các kết hợp này echothay vì mkdirđể không phải dọn dẹp sau đó):

Đối chiếu

$ 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

đến

$ 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

Nếu bạn có Bash 4, hãy thử

$ 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

Trên Linux, bạn có thể tạo các chuỗi chữ số bằng lệnh "seq", nhưng điều này không tồn tại trên tất cả các hệ thống Unix. Ví dụ: để tạo các thư mục từ 1 đến 100:

mkdir `seq 1 100`

Trong khi bạn chắc chắn có thể tạo các thư mục từ A đến Z với các tiện ích shell:

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

Có lẽ nó ít xấu xí hơn khi chỉ sử dụng Perl:

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

-1

mkdir direct{1..3}sẽ dẫn đến mkdir direct1 direct2 direct3và như vậy. Giống với{a..z}


2
đây là một sự lặp lại của ba câu trả lời hiện có câu trả lời mà tôi đã nhận xét
Jeff Schaller

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.