มีวิธีการอย่างรวดเร็วเปลี่ยนนามสกุลไฟล์ทั้งหมดของไฟล์ทั้งหมดในโฟลเดอร์หรือไม่?


15

ฉันมีโฟลเดอร์หนังสือเสียงขนาดใหญ่. m4b ซึ่งในรูปแบบปัจจุบันจะไม่เล่นบนโทรศัพท์ Android ของฉัน อย่างไรก็ตามพวกเขาทำงานได้ดีหากมีการเปลี่ยนชื่อเป็น. m4a

มีวิธีการอย่างรวดเร็วหรือคำสั่งเทอร์มินัลที่สามารถเปลี่ยนชื่อไฟล์. m4b ทุกไฟล์ในโฟลเดอร์เป็น. m4a ได้หรือไม่? ไม่จำเป็นต้องมีการแปลงไฟล์ใด ๆ เพียงแค่เปลี่ยนชื่อนามสกุลไฟล์ทำงานได้อย่างสมบูรณ์แบบ


2
FYI: renameเป็นสคริปต์ PERL และยอมรับการแสดงผลปกติ ระบบ Debian ยังมีคำสั่งเป็นส่วนหนึ่งของrename.ul util-linux-ng packageหากไม่ได้ติดตั้ง Perl (ok ไม่น่าจะเป็นไปได้อย่างยิ่ง;)) renameเช่นกัน
Rinzwind

คำตอบ:


17

สิ่งนี้จะทำงานให้คุณ

rename 's/.m4b$/.m4a/' *.m4b

สำหรับการทดสอบการใช้งานคุณสามารถใช้คำสั่งนี้:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v หมายถึง "verbose" และมันจะออกชื่อของไฟล์เมื่อมันเปลี่ยนชื่อพวกเขา

-n จะทำการทดสอบที่จะไม่เปลี่ยนชื่อไฟล์ใด ๆ แต่จะแสดงรายการไฟล์ที่จะถูกเปลี่ยนชื่อ


คำตอบที่ดีกว่าของฉันมาก ฉันขี้เกียจและพยายามที่จะไม่ใช้การแสดงออกปกติ ...
adempewolff

ขอบคุณทำงานรักษา ขอบคุณ @adempewolff สำหรับความพยายามด้วย
ภาพขนาดย่อ

10

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

มีหลายวิธีในการเปลี่ยนการขยาย แต่ฉันใช้${var/original/replacement}กระบวนทัศน์ที่เรียบง่ายที่นี่:

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

หากคุณต้องการที่จะเห็นสิ่งที่จะเปลี่ยนโดยคำสั่งสถานที่echoก่อนmvและการเปลี่ยนแปลงจะถูกระบุไว้

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


1 วิธีนี้ทำงานเช่นเดียวกับคำตอบโดย @Basharat Sial *.m4bยกเว้นก็ยังจะทำงานเมื่อคุณมีไฟล์จำนวนมากการจับคู่ argument list too longมิฉะนั้นคุณจะตีข้อผิดพลาด
ด้านไหม้เมื่อ

นอกจากนี้หากต้องการดูมันเกิดขึ้นเพิ่มธง verbose:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
แมตต์เผา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.