2011-12-18 20 views
8

मैं एक साधारण लॉन्चडेमन विकसित कर रहा हूं जो फ़ाइलों को एक निर्देशिका से दूसरी निर्देशिका में कॉपी करता है। मुझे फ़ाइलों को ठीक से स्थानांतरित करने के लिए मिल गया है।टर्मिनल/बैश के साथ निर्देशिका में एकाधिक फ़ाइलों के फ़ाइल एक्सटेंशन बदलें?

मैं सिर्फ .mp3 बजाय के होने की निर्देशिका में फ़ाइलों को चाहते .dat के

फ़ाइलों में से कुछ इस तरह दिखेगा:

6546785.8786.dat
3678685.9834.dat
४६,५८,६७९.४३७५। Dat

मैं उन्हें इस तरह दिखना चाहते हैं:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

यह है कि मैं क्या bash स्क्रिप्ट के अंत में है फ़ाइल एक्सटेंशन नाम बदलने के लिए है।

cd $mp3_dir 
mv *.dat *.mp3 
exit 0 

समस्या फ़ाइल * 6546785.8786.mp3

के बजाय .mp3 और जब एक और 6546785.8786.dat फ़ाइल $ mp3_dir को आयात किया जाता है, * .mp3 नई .mp3 के साथ ओवरराइट है के रूप में बाहर आता है

मुझे का नाम बदलने की जरूरत है .dat फ़ाइल एक्सटेंशन .mp3 पर और फ़ाइल नाम रखें।

विचार? सुझाव?

उत्तर

27

प्रयास करें:

for file in *.dat; do mv "$file" "${file%dat}mp3"; done 

या, यदि आपका खोल यह है:

rename .dat .mp3 *.dat 

अब, क्यों अपने आदेश काम नहीं किया: सब से पहले, यह अधिक से अधिक कुछ है कि आप केवल आपकी निर्देशिका में एक फ़ाइल थी जब इसका नाम बदलकर *.mp3 कर दिया गया था, अन्यथा mv*.mp3: not a directory के साथ विफल रहा होगा।

और एमवी फ़ाइल ग्लब्स के साथ कोई जादू नहीं करता है, यह खोल है जो ग्लोब का विस्तार करता है। कौन सा है, जिसका अर्थ है यदि आप निर्देशिका में इस फाइल था:

t.dat 

और आपके द्वारा लिखे गए:

mv *.dat *.mp3 

खोल t.dat करने के लिए *.dat का विस्तार किया है जाएगा। *.mp3

mv t.dat *.mp3 

कौन सा नाम की एक फ़ाइल, सचमुच पैदा करेगा, हालांकि, कुछ भी नहीं *.mp3 से मेल खाएंगे के रूप में, खोल छोड़ दिया है | के रूप में है, पूरी तरह से विस्तृत आदेश अर्थ है।आदेश के लिए विस्तार किया है |

t1.dat t2.dat 

:

हैं, तो दूसरी ओर, आप कई*.dat नामित फ़ाइलें, था के रूप

mv t1.dat t2.dat *.mp3 

लेकिन यह असफल हो जायेगी: अगर mv पर दो से अधिक तर्क हैं, यह एक निर्देशिका होने के लिए अंतिम तर्क (यानी, *.mp3) की अपेक्षा करता है।

+0

कि महान काम किया है। मैं कसम खाता हूं कि मैंने सोचा कि मैंने सही जवाब के लिए पूरे इंटरनेट की खोज की है। बहुत बहुत धन्यवाद। अब मुझे यह समझने की जरूरत है कि एमपी 3 को स्वचालित रूप से गीत के नाम पर कैसे नामित किया जाए। – CokePokes

+0

कोई समस्या नहीं :) संपादन भी देखें, ऐसा करने के लिए एक और निसर कमांड है। और जवाब स्वीकार करना न भूलें;) – fge

+3

+1। यदि आप "डबलक्वॉट" में चर डालते हैं तो यह रिक्त स्थान के साथ फ़ाइल नामों के लिए भी काम करेगा। –

15

किसी मैक पर किसी के लिए, यदि आपके पास ब्रेव नहीं है तो यह बहुत आसान है, अगर मेरी सलाह है तो मेरी सलाह मिल जाएगी। फिर जब अभी स्थापित बस इस

$ brew install rename 

तो एक बार नाम बदलने (निर्देशिका है जहाँ फ़ाइलें हैं में) बस टाइप स्थापित किया गया है

$ rename -s dat mp3 *