เทอร์มินัลสคริปต์เพื่อสร้างโฟลเดอร์และคัดลอกไฟล์ตามส่วนของชื่อไฟล์


0

ฉันมีโฟลเดอร์ที่มีไฟล์หลายพันไฟล์ในรูปแบบนี้

  • ชื่อไฟล์ A - 1.ext
  • ชื่อไฟล์ A - 2.ext
  • ชื่อไฟล์ B - 1.ext

และบางเวลา

  • ชื่อไฟล์ B - 02.ext

ฉันต้องการสคริปต์ที่จะอ่านไฟล์และสร้างโฟลเดอร์เดียวที่มีชื่อไฟล์แต่ละชื่อแตกต่างกันก่อน "- # .ext" แล้วเพิ่มไฟล์ทั้งหมดที่มีชื่อเดียวกันลงในโฟลเดอร์

จากตัวอย่างข้างต้นฉันจะมีสองโฟลเดอร์ 1) ชื่อไฟล์ A 2) ชื่อไฟล์ B -  แต่ละไฟล์มีสองไฟล์ ข้อมูลจริงมีไฟล์หลายพันไฟล์และแต่ละกลุ่มสามารถมีไฟล์ 1 ถึง 50ish โดยมีการเพิ่มหมายเลขตามลำดับไปยังตอนท้าย

คำตอบ:


0

หากไฟล์ทั้งหมดของคุณเป็นไปตามแบบแผนของ dirname - the_rest_and_ext (มี - ตรงกลาง) คุณสามารถใช้สิ่งต่อไปนี้:

for f in *; do
   dir_name=`echo "$f" | sed 's/ -.*//'`
   mkdir -p "$dir_name"
   mv "$f" "$dir_name"
done

หากไฟล์ทั้งหมดมีนามสกุลเดียวกันคุณสามารถเปลี่ยน for เพื่อสิ่งที่ชอบ:

for f in *.ext; do

หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่


สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบตามคำขอของฉัน แต่คุณถูกต้องว่าฉันมีชื่อไฟล์บางตัวที่มี "-" อยู่ในชื่อเรื่อง แต่ไม่มีใครที่มี "- #" นอกเหนือจากตัวเลขที่ท้ายไฟล์ ฉันจะเพิ่มอะไรเพื่อเพิกเฉย "-" (space-dash-space) เมื่อไม่ได้ตามด้วยหมายเลข
KeithS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.