ฉันกำลังพยายามสร้างแผนผังไดเรกทอรีจาก A ถึง Z โดยที่ไดเรกทอรีถัดไปอยู่ในไดเรกทอรีปัจจุบัน
ตัวอย่างเช่น: B อยู่ภายใน A และ C อยู่ภายใน B และอื่น ๆ ..
-A
--B
---C
----...Z
เบาะแสใด ๆ เกี่ยวกับวิธีทำให้เสร็จโดยอัตโนมัติ?
mkdir -p
")
ฉันกำลังพยายามสร้างแผนผังไดเรกทอรีจาก A ถึง Z โดยที่ไดเรกทอรีถัดไปอยู่ในไดเรกทอรีปัจจุบัน
ตัวอย่างเช่น: B อยู่ภายใน A และ C อยู่ภายใน B และอื่น ๆ ..
-A
--B
---C
----...Z
เบาะแสใด ๆ เกี่ยวกับวิธีทำให้เสร็จโดยอัตโนมัติ?
mkdir -p
")
คำตอบ:
ด้วยmkdir
, printf
และการขยายตัวของรั้งทุบตี:
$ mkdir -p "$(printf "%s/" {A..Z})"
$ tree A
A
└── B
└── C
└── D
└── E
└── F
└── G
└── H
└── I
└── J
└── K
└── L
└── M
└── N
└── O
└── P
└── Q
└── R
└── S
└── T
└── U
└── V
└── W
└── X
└── Y
└── Z
25 directories, 0 files
{A..Z}
ขยายA B ... Z
,printf "%s/"
พิมพ์อาร์กิวเมนต์ด้วย a /
หลังพวกมันดังนั้นฉันจะได้A/B/...Z/
mkdir -p
สร้างA/B/.../Z
ไดเรกทอรีด้วยไดเรกทอรีหลักที่จำเป็นต้องสร้าง-p
ในmkdir
คำสั่ง
ในระดับที่ง่ายมากคุณสามารถใช้ประโยชน์จาก{A..Z}
การขยายตัวเพื่อสร้างจดหมายทั้งหมดจากนั้นทำซ้ำและป้อนแต่ละตัว:
~/test_directory$ for d in {A..Z}; do mkdir "$d"; cd "$d"; done
~/test_directory/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z$
ดังที่คุณเห็นในผลลัพธ์ของพรอมต์ของฉันตอนนี้คุณมีไดเรกตอรีที่โยงโซ่เรียบร้อยแล้ว
อย่างไรก็ตามหากชื่อไดเรกทอรีจริงแตกต่างจากตัวอักษรเพียงอย่างเดียวคุณจะต้องระบุรายชื่อไดเรกทอรีอย่างใดอย่างหนึ่งอาจผ่านไฟล์ซึ่งคุณทำซ้ำและทำกระบวนการเดียวกันอีกครั้ง โดยพื้นฐานแล้วสิ่งนี้
while IFS= read -r dir_name;do mkdir "$dir_name"; cd "$dir_name" ;done < directory_list.txt
for d in {A..Z}; do mkdir "$d"; cd "$d"; for i in {1..100}; do mkdir "${d}${i}" ;done ; done
for d in {A..Z}; do mkdir "$d"; cd "$d"; mkdir "$d"{1..100}; done
tree
ฉันไม่แน่ใจว่าจะแก้ไขได้อย่างไร แต่ฉันคิดว่านี่อาจไม่ใช่tree
ปัญหา แต่เป็นคำสั่งการเรียงลำดับของเชลล์ ฉันขอแนะนำให้ถามคำถามจริงเกี่ยวกับที่นี่หรือดีกว่าได้ที่ unix.stackexchange.com
แม้ว่าวิธีของคุณครูprintf
จะไม่สามารถเอาชนะได้ แต่ฉันก็ชอบjot
สิ่งนี้เป็นส่วนตัว jot
ไม่ได้ติดตั้งเป็นค่าเริ่มต้นใน Ubuntu athena-jot
แพคเกจให้มัน คำสั่งเหล่านี้ใช้ได้ผล:
mkdir -p "$(jot -s/ -c 26 A)"
jot -s/ -c 26 A | xargs mkdir -p
จริงๆคำสั่งใด ๆ ที่สร้างลำดับของตัวอักษรและร่วมกับพวกเขาด้วยเครื่องหมายทับจะอำนวยความสะดวกนี้เพราะผลผลิตของตนนั้นจะสามารถส่งผ่านไปยังmkdir -p
ทั้งผ่านแทนคำสั่ง (ในขณะที่คำตอบของ Muru ) xargs
หรือการใช้ นี่คือตัวอย่างบางส่วนที่ใช้เครื่องมือบางอย่างและxargs
ไม่ต้องการให้คุณติดตั้งซอฟต์แวร์ยกเว้นในระบบที่น้อยที่สุดหรือ Ubuntu Core:
perl -we 'print join "/", A..Z' | xargs mkdir -p
ruby -we 'print (?A..?Z).to_a * ?/' | xargs mkdir -p
python3 -c 'print("/".join(__import__("string").ascii_uppercase))' | xargs mkdir -p
เก่าอูบุนตูรุ่นมาพร้อมกับงูหลาม 2 แทนของงูใหญ่ 3. เพื่อที่เพียงแค่เปลี่ยนpython3
เพื่อpython
ที่จะทำให้การทำงานของคำสั่งสุดท้ายถ้าคุณอยากที่จะทำเช่นนี้กับงูหลาม
ในทำนองเดียวกันวิธีที่สั้นและเรียบง่ายของ muruสามารถเขียนทับได้:
printf '%s/' {A..Z} | xargs mkdir -p
ส่วนท้าย/
ในพา ธ ไดเร็กทอรีmkdir -p
ถูกขอให้สร้างไม่มีปัญหาและเป็นที่นิยมมากกว่า แต่ก็ไม่เป็นไรที่จะละเว้นเช่นเดียวกับตัวอย่างอื่นในคำตอบนี้