क्या फ़ोल्डर में सभी फ़ाइलों के सभी फ़ाइल एक्सटेंशन को जल्दी से बदलने का एक तरीका है?


15

मेरे पास .m4b ऑडियो पुस्तकों का एक बड़ा फ़ोल्डर है, जो उनके वर्तमान प्रारूप में मेरे एंड्रॉइड फोन पर नहीं चलेगा। हालाँकि वे ठीक काम करते हैं अगर उनका नाम बदलकर .m4a कर दिया जाए

क्या कोई त्वरित विधि या टर्मिनल कमांड है जो प्रत्येक .m4b फ़ाइल को एक फ़ोल्डर में .m4a में बदल सकता है? फ़ाइलों के किसी भी रूपांतरण की कोई आवश्यकता नहीं है, बस फ़ाइल एक्सटेंशन का नाम बदलकर पूरी तरह से ठीक काम करता है।


2
FYI करें: renameएक PERL स्क्रिप्ट है और नियमित अभिव्यक्ति को स्वीकार करता है। डेबियन सिस्टम के rename.ulहिस्से के रूप में एक कमांड भी है util-linux-ng package। यदि पर्ल स्थापित नहीं है (ठीक है, अत्यधिक संभावना नहीं है;)) renameभी नहीं है।
रिनजविंड

जवाबों:


17

यह आपके लिए काम करेगा।

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

टेस्ट रन के लिए आप इस कमांड का उपयोग कर सकते हैं:

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

-v "वर्बोज़" का अर्थ है और यह फ़ाइलों के नाम का उत्पादन करेगा जब यह उनका नाम बदल देता है।

-n एक परीक्षण चलाएगा जहां यह किसी भी फ़ाइल का नाम नहीं बदलेगा, लेकिन आपको उन फ़ाइलों की एक सूची दिखाएगा जिनका नाम बदला जाएगा।


मेरा इससे बेहतर जवाब। मैं आलसी हो रहा था और नियमित अभिव्यक्ति का उपयोग नहीं करने की कोशिश कर रहा था ...
adempewolff

धन्यवाद, एक इलाज काम करता है। बहुत प्रयास के लिए @adempewolff के लिए धन्यवाद
coversnail

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
मैट जला

इसके अलावा, ऐसा होते हुए देखने के लिए, क्रिया ध्वज जोड़ें:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
मैट 1355 में
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.