ฉันมีชื่อโฟลเดอร์music
ที่มีโฟลเดอร์ศิลปินทั้งหมดอยู่ภายใน มีวิธีการสร้างโฟลเดอร์เหล่านี้: 1. Albums
, 2. EP
, 3. Singles
, 4. Live
ในทุกโฟลเดอร์ศิลปินที่มีคำสั่งหรือไม่?
ฉันมีชื่อโฟลเดอร์music
ที่มีโฟลเดอร์ศิลปินทั้งหมดอยู่ภายใน มีวิธีการสร้างโฟลเดอร์เหล่านี้: 1. Albums
, 2. EP
, 3. Singles
, 4. Live
ในทุกโฟลเดอร์ศิลปินที่มีคำสั่งหรือไม่?
คำตอบ:
แน่นอนว่าดำเนินการนี้ในโฟลเดอร์เพลงที่มีโฟลเดอร์ศิลปินอยู่:
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
) จากนั้นทำให้โฟลเดอร์ย่อย (ญาติ) ที่ต้องการ
คุณอาจต้องการวงเล็บปีกกา {หยิก} สำหรับอันนี้
เพื่อประโยชน์ของข้อโต้แย้งนี้เราจะแกล้ง. / เพลงไม่มีอยู่
ในไดเรกทอรีฐานของคุณสำหรับ ./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/
music
ดังนั้นอาร์กิวเมนต์ที่ถูกต้องmkdir
จะเป็น./music/*/{"1. Albums","2. EP","3. Singles","4. Live"}
-p
เป็นรูปแบบสั้น --parent
ๆ