จับ 2 หมายเลขจากชื่อไฟล์แล้วใส่ลงในคำสั่ง

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

พื้นหลังโดยย่อ: เมื่อนำเข้าคลังเพลงของฉัน (เดิมจัดโดย iTunes) ไปยัง Banshee ไฟล์ทั้งหมดถูกทำซ้ำเพื่อให้เหมาะกับสไตล์ตัวเลขของ Banshee (เช่น 02. แทนที่จะเป็น 02 ) ยิ่งไปกว่านั้น iTunes เห็นได้ชัดว่าไม่ได้บันทึก ID3 แท็กให้กับไฟล์ต่างๆ มากมายจึงว่างเปล่า ตอนนี้ฉันมีแท็กสองสามพันแท็กที่ต้องแก้ไขและทำซ้ำไฟล์ที่จะกำจัด

เพื่อให้กระบวนการเป็นแบบอัตโนมัติ ฉันเริ่มเรียนรู้การเขียนสคริปต์ทุบตี ฉันคิดสคริปต์ขึ้นมา (ซึ่งคุณสามารถดูได้ที่นี่) ที่ทำสี่สิ่ง: ลบไฟล์ iTunes ที่ไม่จำเป็น รับอินพุต จากผู้ใช้เกี่ยวกับข้อมูลแท็ก ID3 และจัดเก็บไว้ในตัวแปร ล้างข้อมูลแท็กปัจจุบันออกจากไฟล์ทั้งหมด เขียนแท็กใหม่ด้วยข้อมูลที่นำมาจากผู้ใช้ โดยใช้โปรแกรมชื่อ eyeD3

ตอนนี้ฉันพบปัญหาของฉันที่นี่ สคริปต์นี้เป็นการเขียนข้อมูลแบบสุ่มสี่สุ่มห้าไปยังไฟล์ mp3 ทั้งหมดใน dir ซึ่งเป็นเรื่องปกติสำหรับแท็กที่ไฟล์ทั้งหมดมีเหมือนกัน เช่น ศิลปิน อัลบั้ม แทร็กทั้งหมด ปี ฯลฯ แต่ฉันไม่สามารถแท็กหมายเลขแทร็กแต่ละหมายเลขด้วยวิธีนี้ได้ ฉันจึงยังคงแก้ไขแท็ก track# ทีละรายการด้วยตนเอง และนั่นคือสิ่งที่ฉันไม่อยากทำเกิน 2,000 ครั้งจริงๆ

ชื่อไฟล์ทั้งหมดมีลักษณะดังนี้:

01. song1.mp3
02. song2.mp3
03. song3.mp3

คำสั่งในการเขียนหมายเลขแทร็กลงในแท็กมีลักษณะดังนี้:

$ eyeD3 -n 1 "01. song1.mpg"

ดังนั้น... ฉันไม่แน่ใจว่าจะทำให้สิ่งนี้เป็นอัตโนมัติได้อย่างไร ฉันต้องคว้าตัวเลขสองตัวแรกของชื่อไฟล์แต่ละชื่อ เก็บไว้ที่ใดที่หนึ่ง จากนั้นเรียกคืนแต่ละหลักในคำสั่ง eyeD3 ที่แยกจากกัน


person PatMcTookis    schedule 15.04.2014    source แหล่งที่มา
comment
บางทีอาจมีวิธีที่แตกต่างออกไปเล็กน้อย ฉันเพิ่งตรวจสอบ Banshee มีบริการปลั๊กอิน Musicbrainz การใช้ปลั๊กอินนี้คุณอาจลองเติมแท็ก ID3 อัตโนมัติ   -  person user3159253    schedule 15.04.2014
comment
นี่อาจเป็นวิธีที่มีประสิทธิผลในการทำงานให้สำเร็จมากกว่าการแยกวิเคราะห์ชื่อไฟล์แต่ละไฟล์ เนื่องจากชื่อไฟล์มักไม่มีข้อมูลแท็กทั้งหมด เป็นเพียงชื่อเพลงเท่านั้น   -  person user3159253    schedule 15.04.2014


คำตอบ (1)


คุณสามารถวนซ้ำไฟล์โดยใช้ globbing และใช้การขยายสตริงย่อยเพื่อจับอักขระสองตัวแรกของชื่อไฟล์:

for f in *mp3; do
    eyeD3 -n ${f:0:2} "$f"
done
person Josh Jolly    schedule 15.04.2014