बैश वाली फ़ाइलों में फ़ाइल एक्सटेंशन जोड़ें


94

बैश के साथ एक्सटेंशन-कम फ़ाइलों में फ़ाइल एक्सटेंशन ".jpg" को जोड़ने का अच्छा तरीका क्या है?


3
mv "${file}" "${file}.jpg"?
onteria_

2
आपके विचार में, "एक्सटेंशन-लेस फ़ाइल" क्या है? क्या यह नाम के बिना एक फ़ाइल है?
ग्लेन जैकमैन

जवाबों:


118
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done

8
दूसरा एक विस्तारहीन फ़ाइलों का नाम बदलने के लिए एकदम सही है! धन्यवाद!
अनोन

2
दूसरा सभी फाइलों पर एक एक्सटेंशन जोड़ता है, न कि केवल एक्सटेंशनलेस
जेफ

5
बस के रूप में एक नोट "${f%.jpg}"बैश खोल स्ट्रिंग हेरफेर है। `$ {स्ट्रिंग% सबस्ट्रिंग}` $ स्ट्रिंग के पीछे से $ सबस्ट्रिंग का सबसे छोटा मैच हटाता है।
जिचाओ

चेतावनी: यदि आपके पास मिश्रित एक्सटेंशन वाला एक फ़ोल्डर है, तो जान लें कि ऊपर .jpgभी सामान्य फ़ाइलों में जोड़ा गया है।
23

61

आप नाम का उपयोग कर सकते हैं:

rename 's/(.*)/$1.jpg/' *

3
आप किस संस्करण का नाम बदल रहे हैं? मेरा अलग तर्क है:rename from to file...
बी जॉनसन

1
नाम को पर्ल के साथ शामिल किया गया है, जो कि संस्करण 5.10.1 है।
किम स्टेबेल

3
यह Ubuntu (और इसलिए मैं सभी डेबियन आधारित डिस्ट्रोस का अनुमान लगा रहा हूं) के साथ बहुत अच्छा काम करता है, jm666 के उत्तर की तुलना में बहुत कम क्रिया।
रोजर हीथकोट

28

एक और तरीका - छोरों के बिना

find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep  'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg

टूट - फूट:

  • एक्सटेंशन के बिना सभी फ़ाइलों को ढूंढें
  • फ़ाइल प्रकार की जाँच करें
  • केवल JPG फ़ाइलों को फ़िल्टर करें
  • फ़ाइल जानकारी हटाएं
  • xargs प्रत्येक फ़ाइल के लिए "mv" चलाता है

उपरोक्त कमांड शुष्क रन के लिए है , इसके बाद आपको 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...

आप इसे लूप में डाल सकते हैं और यह xargs बहुत ही शानदार है। मुझे इस स्थिति में रयान का जवाब बेहतर लगा।
लुसियस

1
@ लुसियस - btw, सवाल "विस्तार रहित" फाइलें चाहते हैं - इसलिए रयान को केवल उन लोगों को ढूंढना चाहिए ...
jm666

@ jm666 अरे! कैसे मैं आपके कोड स्निपेट को एक फ़ोल्डर में सभी एक्सटेंशन रहित फ़ाइलों को उनके संबंधित एक्सटेंशन में बदलने के लिए संशोधित करता हूं। (मैं फाइल -b $ फ़ाइल नाम कमांड द्वारा सही एक्सटेंशन का पता लगा रहा हूँ।)
सौम्यजीत

24

निर्देशिका, सीडी के लिए जहाँ आपकी फ़ाइलें हैं:

for f in *;do mv $f $f.jpg;done

किसी कारण के लिए यह मेरे लिए काम करता है, लेकिन उद्धरण के साथ सेठ का समाधान नहीं है। (OSX माउंटेन लायन बैश)
डेल्रोको

4
यदि for f in *;do mv "$f" "$f".jpg;doneफ़ाइल नाम में रिक्त स्थान का समर्थन करने के लिए उपयोग किया जाता है तो बेहतर होगा ।
ऋतिक

इस सुरुचिपूर्ण और सरल समाधान के लिए धन्यवाद - मैं कई बार इस जवाब पर उतरा हूं, लेकिन इसे याद नहीं कर सकता। # देजावु
टिम एंडरसन



1

मेरे मामले में मुझे फ़िलाटाइप के बारे में जानकारी नहीं थी इसलिए मैंने फ़ाइल कमांड की मदद से mv कमांड का उपयोग किया और संभवतः फ़ाइल प्रकार को खोजने के लिए। यह समाधान सभी फ़ाइलों के लिए एकदम सही नहीं हो सकता है क्योंकि फ़ाइल कमांड शायद फ़िलाटाइप को नहीं पहचान सकता है लेकिन यह मेरे लिए ज्यादातर अच्छा काम करता है।

for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done

Awk का उपयोग कमांड फाइल से लौटे स्ट्रिंग के दूसरे शब्द को स्ट्रिप करने के लिए है जो वास्तव में एक्सटेंशन है।


स्वचालित रूप से jpg और png संभालता है। इसका इस्तेमाल किया और काम करता है - बहुत बहुत धन्यवाद! केवल अब एक्सटेंशन CAPS हैं। हालांकि छोटी समस्या :)
क्रिवर

0
rename --dry-run * -a ".jpg" # test  
* -a ".jpg" # rename

--dry-runऔर -aमेरे संस्करण में उपलब्ध नहीं हैं rename। यदि यह कुछ वास्तुकला के लिए विशिष्ट है तो इसे निर्दिष्ट किया जाना चाहिए।
फर्नांडो कैसर

0

आप कई फ़ाइलों को स्थानांतरित कर सकते हैं । मैं इस परियोजना का अनुरक्षक हूं। वाक्य विन्यास सरल है।

mmf files*

यह आपके $ EDITOR को सभी फ़ाइल नामों के साथ खोलेगा, या डिफ़ॉल्ट रूप से विम करेगा और आप बस Ctrl + v + G का उपयोग करके सभी फ़ाइल नामों के अंत को उजागर कर सकते हैं, फ़ाइल को बचा सकते हैं, छोड़ सकते हैं और यह कि आपकी सभी फ़ाइलों का नाम बदल दिया गया है


-2

रयान ली

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

find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then  mv "$FILE" "$FILE".eml; fi; done;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.