ฉันรู้ด้วย mkdir ฉันสามารถทำได้mkdir A B C D E F
เพื่อสร้างแต่ละไดเรกทอรี ฉันจะสร้างไดเรกทอรี AZ หรือ 1-100 โดยไม่ต้องพิมพ์ในตัวอักษรหรือตัวเลขแต่ละตัวได้อย่างไร
ฉันรู้ด้วย mkdir ฉันสามารถทำได้mkdir A B C D E F
เพื่อสร้างแต่ละไดเรกทอรี ฉันจะสร้างไดเรกทอรี AZ หรือ 1-100 โดยไม่ต้องพิมพ์ในตัวอักษรหรือตัวเลขแต่ละตัวได้อย่างไร
คำตอบ:
มันอาจจะง่ายที่สุดในการใช้การfor
วนซ้ำ:
for char in {A..Z}; do
mkdir $char
done
for num in {1..100}; do
mkdir $num
done
คุณต้องการ bash 3.0 เป็นอย่างน้อย มิฉะนั้นคุณต้องใช้สิ่งที่ชอบseq
{}
ไวยากรณ์ไวยากรณ์ทุบตีไม่ได้ผูกติดอยู่กับfor
โครงสร้าง
mkdir {A..Z}
ก็เพียงพอแล้วด้วยตัวเอง
http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion
mkdir -p ./logs-{1..5}
คุณสามารถทำชุดค่าผสมที่ซับซ้อนมากขึ้น (ลองชุดเหล่านี้ด้วย 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
บน 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 $_ }'
mkdir direct{1..3}
จะส่งผลให้mkdir direct1 direct2 direct3
และอื่น ๆ เหมือนกันสำหรับ{a..z}
mkdir {A..Z} mkdir {0..100} mkdir test_ {A..Z} และอื่น ๆ