बैश के साथ एक्सटेंशन-कम फ़ाइलों में फ़ाइल एक्सटेंशन ".jpg" को जोड़ने का अच्छा तरीका क्या है?
बैश के साथ एक्सटेंशन-कम फ़ाइलों में फ़ाइल एक्सटेंशन ".jpg" को जोड़ने का अच्छा तरीका क्या है?
जवाबों:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
"${f%.jpg}"
बैश खोल स्ट्रिंग हेरफेर है। `$ {स्ट्रिंग% सबस्ट्रिंग}` $ स्ट्रिंग के पीछे से $ सबस्ट्रिंग का सबसे छोटा मैच हटाता है।
.jpg
भी सामान्य फ़ाइलों में जोड़ा गया है।
आप नाम का उपयोग कर सकते हैं:
rename 's/(.*)/$1.jpg/' *
rename from to file...
एक और तरीका - छोरों के बिना
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg
टूट - फूट:
उपरोक्त कमांड शुष्क रन के लिए है , इसके बाद आपको mv से पहले "इको" को हटा देना चाहिए
संपादित करें कुछ लोगों का सुझाव है कि यहां "उद्धरण में लपेट पथ तर्क की आवश्यकता है , रिक्त स्थान के साथ पथों पर विभाजन से बचने के तर्क" ।
आमतौर पर, यह सिफारिश सही है, इस मामले में नहीं है। क्योंकि, यहां %
बदल दिया है नहीं खोल विस्तार के द्वारा लेकिन द्वारा xargs
, आंतरिक रूप से (सीधे) तो %
भी फ़ाइल नामों में रिक्तियों के साथ सही ढंग से प्रतिस्थापित कर दिया जाएगा।
सरल डेमो:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b' 'c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths
#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
निर्देशिका, सीडी के लिए जहाँ आपकी फ़ाइलें हैं:
for f in *;do mv $f $f.jpg;done
for f in *;do mv "$f" "$f".jpg;done
फ़ाइल नाम में रिक्त स्थान का समर्थन करने के लिए उपयोग किया जाता है तो बेहतर होगा ।
मेरे मामले में मुझे फ़िलाटाइप के बारे में जानकारी नहीं थी इसलिए मैंने फ़ाइल कमांड की मदद से mv कमांड का उपयोग किया और संभवतः फ़ाइल प्रकार को खोजने के लिए। यह समाधान सभी फ़ाइलों के लिए एकदम सही नहीं हो सकता है क्योंकि फ़ाइल कमांड शायद फ़िलाटाइप को नहीं पहचान सकता है लेकिन यह मेरे लिए ज्यादातर अच्छा काम करता है।
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done
Awk का उपयोग कमांड फाइल से लौटे स्ट्रिंग के दूसरे शब्द को स्ट्रिप करने के लिए है जो वास्तव में एक्सटेंशन है।
rename --dry-run * -a ".jpg" # test
* -a ".jpg" # rename
--dry-run
और -a
मेरे संस्करण में उपलब्ध नहीं हैं rename
। यदि यह कुछ वास्तुकला के लिए विशिष्ट है तो इसे निर्दिष्ट किया जाना चाहिए।
आप कई फ़ाइलों को स्थानांतरित कर सकते हैं । मैं इस परियोजना का अनुरक्षक हूं। वाक्य विन्यास सरल है।
mmf files*
यह आपके $ EDITOR को सभी फ़ाइल नामों के साथ खोलेगा, या डिफ़ॉल्ट रूप से विम करेगा और आप बस Ctrl + v + G का उपयोग करके सभी फ़ाइल नामों के अंत को उजागर कर सकते हैं, फ़ाइल को बचा सकते हैं, छोड़ सकते हैं और यह कि आपकी सभी फ़ाइलों का नाम बदल दिया गया है
रयान ली
एक निर्देशिका के भीतर एक फ़ाइल एक्सटेंशन को कई फाइलों में जोड़ने के लिए सही सिंटैक्स, जिसमें फ़ाइल एक्सटेंशन नहीं है
find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done;
mv "${file}" "${file}.jpg"
?