ฉันจะสร้างโฟลเดอร์ในโฟลเดอร์ในเทอร์มินัลได้อย่างไร


12

ฉันมีชื่อโฟลเดอร์musicที่มีโฟลเดอร์ศิลปินทั้งหมดอยู่ภายใน มีวิธีการสร้างโฟลเดอร์เหล่านี้: 1. Albums, 2. EP, 3. Singles, 4. Liveในทุกโฟลเดอร์ศิลปินที่มีคำสั่งหรือไม่?

คำตอบ:


12

แน่นอนว่าดำเนินการนี้ในโฟลเดอร์เพลงที่มีโฟลเดอร์ศิลปินอยู่:

for artist in */; do
   for folder in "1. Albums" "2. EP" "3. Singles" "4. Live"; do
      mkdir "$artist/$folder"
   done
done

คุณสามารถดำเนินการนี้ใน CLI ของคุณหรือคุณสามารถทำให้มันเป็นสคริปต์ของเชลล์โดยการเพิ่ม#!/bin/shเป็นบรรทัดแรกและบันทึกไว้ในไฟล์ อย่าลืมทำให้ไฟล์นั้นทำงานได้

สำหรับสิ่งที่ทำ: มันวนซ้ำไดเรกทอรีทั้งหมด ( */) ภายในไดเรกทอรีปัจจุบันจากนั้นสำหรับแต่ละไดเรกทอรีเหล่านี้จะทำซ้ำผ่านโฟลเดอร์ย่อยที่ต้องการ (ที่สองfor) จากนั้นทำให้โฟลเดอร์ย่อย (ญาติ) ที่ต้องการ


1
โอ้มันสวยแล้วนี่จะลงไปในประวัติศาสตร์ ;-)
Steve

18

คุณอาจต้องการวงเล็บปีกกา {หยิก} สำหรับอันนี้

เพื่อประโยชน์ของข้อโต้แย้งนี้เราจะแกล้ง. / เพลงไม่มีอยู่

ในไดเรกทอรีฐานของคุณสำหรับ ./music เราจะใช้คำสั่ง -p เพื่อสร้างไดเรกทอรีย่อยที่จำเป็นและจะใช้เครื่องหมายปีกกาเพื่อสร้างอาร์เรย์ขนาดเล็ก

คำสั่ง-pสั้นสำหรับผู้ปกครองถ้าจำได้ง่ายกว่าคุณสามารถใช้--parentแทนได้

mkdir -p ./music/{"1. Albums","2. EP","3. Singles","4. Live"}

หากคุณต้องการที่จะเล่นกับสิ่งนี้คุณอาจยกตัวอย่างเช่น

mkdir -p ./folder/prefix{a{1/only,2,3},b,c}suffix/more{z,y,x}

คุณมีนิพจน์ที่ซ้อนกันคุณสามารถแทรกวงเล็บปีกกาตรงกลางของสตริงและคุณยังสามารถอนุญาตให้ไดเรกทอรีย่อยติดตามสูทและคุณสามารถระบุไดเรกทอรีย่อยสำหรับอาร์เรย์เฉพาะ

ฉันแนะนำให้คุณสร้างไฟล์ไว้ที่ไหนสักแห่งที่คุณสามารถสร้างเทมเพลตของคุณเองด้วยคำสั่งดังกล่าวและให้คำอธิบาย

เยี่ยมชมหน้านี้สำหรับข้อมูลเพิ่มเติมhttps://www.linuxjournal.com/content/bash-brace-expansionและhttps://www.linux.com/tutorials/all-about-curly-braces-bash/


5
โดยส่วนตัวแล้วฉันชอบคำตอบนี้ดีกว่าเพราะคุณไม่จำเป็นต้องคิดว่าเป็นโปรแกรมเมอร์ ฉันไม่ค่อยใช้วิธีการรั้งลอน แต่มันก็สวยกว่ามาก
jawtheshark

6
OP ต้องการให้ 4 ส่วนย่อยที่อยู่ภายในแต่ละส่วนย่อยของตัวเองmusicดังนั้นอาร์กิวเมนต์ที่ถูกต้องmkdirจะเป็น./music/*/{"1. Albums","2. EP","3. Singles","4. Live"}
joH1 1

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