अगर मेरे पास .htm एक्स्टेंशन वाली फाइलों का एक समूह है, तो मैं उन सभी का नाम कैसे बदल सकता हूं।
mv *.htm *.html
काम नहीं करता।
अगर मेरे पास .htm एक्स्टेंशन वाली फाइलों का एक समूह है, तो मैं उन सभी का नाम कैसे बदल सकता हूं।
mv *.htm *.html
काम नहीं करता।
जवाबों:
या, आप शुद्ध बैश का उपयोग कर सकते हैं ... (एमवी को छोड़कर, वह है ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
और बुरा बेसन सामान से बचें। ;)
बैश में चर विस्तार विकल्पों का एक व्यापक सेट है। यहां इस्तेमाल किया गया, '%', चर के मान से सबसे छोटे मिलान प्रत्यय को हटाता है। पैटर्न एक ग्लोब पैटर्न है, इसलिए ${file%.*}
यह भी काम करेगा। '%%' ऑपरेटर सबसे बड़े मिलान प्रत्यय को हटा देता है, और ऊपर दिए गए उदाहरण में विनिमेय है, जैसा कि पैटर्न तय हो गया है, ${file%%.*}.html
हालांकि abhtm को a.html में बदल देगा।
अधिक स्वच्छ चाल के लिए बैश मैनपेज के चर सबस्टेशन अनुभाग देखें। बहुत कुछ है जो सीधे बैश के भीतर किया जा सकता है।
फ़ाइलनामों में रिक्त स्थान, न्यूलाइन्स या अन्य व्हाट्सएप नहीं होना चाहिए, लेकिन फ्रीहिट के उत्तर का यह संस्करण उन लोगों को संभालता है। इसका उपयोग $()
पठनीयता के बजाय अन्य लाभों के साथ पठनीयता के लिए भी करता है।
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
इससे भी बेहतर - अंत में जोड़ने के विशेष मामले के लिए:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
एक पर्ल उपयोगिता है जो वास्तव में वही करती है जो आप चाहते हैं। इस मामले में:
rename 's/\.htm$/.html/' *htm
या यदि आप उप निर्देशिकाओं का उपयोग कर रहे हैं
(बैश 4.0 और globstar सेटिंग की आवश्यकता है: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
पर्ल के साथ आता है, और मूल रूप से हर यूनिक्स इन दिनों पर्ल के साथ आता है।
shopt -s globstar
डिफ़ॉल्ट रूप से बंद किया जाता है। इसके अलावा, लिनक्स और यूनिक्स में फ़ोल्डर्स के बजाय निर्देशिकाएं हैं।
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
चारों ओर पहली बार के echo
सामने इसे आज़माएं mv
।
आपके मूल के साथ समस्या यह है कि " mv *.htm *.html
" *
शेल द्वारा संभाला गया है, इसलिए mv
कमांड केवल वर्तमान निर्देशिका में .htm और .html फ़ाइलों की सूची देखता है। दूसरे शब्दों में, " mv foo.htm bar.htm stuff.htm six.htm file.htm
" जैसा कुछ । mv केवल जानता है कि 2 से अधिक तर्कों को कैसे संभालना है यदि अंतिम एक निर्देशिका है।
mv
काम क्यों नहीं करेगा।
सबसे अच्छा उपकरण mmv है ।
mmv \*.htm #1.html
" GNU / Linux कमांड लाइन उपकरण सारांश " में उपयोग के अन्य उदाहरण (और अन्य उपकरण) ।
#
।
Util-linux एनजी (फेडोरा पर) पैकेज एक है rename
कमान ने उल्लेख मिलता-जुलता टीआरएस -80 । आप इसे इस तरह से उपयोग कर सकते हैं:
rename .htm .html *.html
ren *.htm *.html
विंडोज में काम करेगा।