ฉันจะสร้างหลายไดเรกทอรีพร้อมกันในไดเรกทอรีได้อย่างไร


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 $ ถ่านเสร็จแล้วซึ่งให้ไดเรกทอรีทดสอบ [AZ] ฉันดีเสมอที่จะเรียนรู้
Steve Burdine

สิ่งหนึ่งที่ต้องจำไว้คือชื่อไฟล์ของคุณจะถูกจัดเรียงเมื่อคุณแสดงรายการหรือใช้พวกเขาด้วย wildcard เช่น * '11' จะเรียงลำดับก่อน '2' สิ่งนี้สามารถหลีกเลี่ยงได้หากคุณจัดเรียงตัวเลขทั้งหมดให้มีความยาวเท่ากันด้วยศูนย์นำหน้า เดนนิสวิลเลียมส์แสดงวิธีการทำเช่นนั้นใน bash 4 แต่คุณสามารถเขียนโค้ดสคริปต์ของคุณให้ทำถ้าคุณไม่มี bash 4
Joe

71

{}ไวยากรณ์ไวยากรณ์ทุบตีไม่ได้ผูกติดอยู่กับforโครงสร้าง

mkdir {A..Z}

ก็เพียงพอแล้วด้วยตัวเอง

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


5
โอ้นั่นเป็นเรื่องที่น่าตื่นเต้น นี่เป็นคำตอบที่ดีกว่า
Michael Mrozek

1
ฉันไม่รู้ว่านี่เป็นเคล็ดลับที่ยอดเยี่ยม!
กลับรายการ

5
+1 เพื่อความงาม +1 ตามสไตล์ +1 สำหรับrcrowley
Stefan

มากกว่า 500 รางวัลจากฉัน
George 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 ด้วยเชลล์ utils:

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

-1

mkdir direct{1..3}จะส่งผลให้mkdir direct1 direct2 direct3และอื่น ๆ เหมือนกันสำหรับ{a..z}


2
นี่คือการกล่าวซ้ำของคำตอบที่มีอยู่สามคำและสิ่งที่ฉันได้แสดงความคิดเห็นไว้แล้ว
Jeff Schaller

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.