एक्सटेंशन को हटाकर कई फ़ाइलों का नाम कैसे बदलें?


14

मेरे पास टिफ़ नाम की एक संख्या है:

sw.001.tif
sw.002.tif
...

और मैं .tifप्रत्येक फाइल के अंत में हटाना चाहता हूं । मैं यह करने के लिए renameकमांड का उपयोग कैसे कर सकता हूं ?


2
इस बात को ध्यान में रखें कि NO linux या unix filesystem विंडोज या VMS- स्टाइल "एक्सटेंशन" का उपयोग करता है - यह केवल इस कन्वेंशन से है कि फ़ाइल नाम का एक प्रत्यय ".tif" या ".c" या ".o" या ".so" है। " जो कुछ भी।
ब्रूस एडिगर

यह ठीक है ... मैं विंडोज़ से लिनक्स पर फाइल आयात कर रहा हूँ :)
पॉल

1
तकनीकी रूप से बोलने वाला विंडोज़ फ़ाइल एक्सटेंशन का उपयोग नहीं करता है, यह सिर्फ इतना है कि विंडोज 95 के फ़ाइल प्रबंधक ने MS-DOS नामकरण योजना से बाहर निकलने के बाद फ़ाइल प्रकार निर्धारित करने के लिए फ़ाइल नाम के अंतिम वर्णों का उपयोग किया और तब से सम्मेलन जारी है।
19

जवाबों:


24

perlके renameरूप में (आमतौर पर डेबियन पर पाया जाता है जहां इसे भी कहा जाता है prename), या यह व्युत्पन्न ( renameडेबियन पर पैकेज):

rename 's/\.tif$//' *.tif

util-linux rename(जैसा कि आमतौर पर रेड हैट पर पाया जाता है, rename.ulडेबियन पर):

rename -- .tif '' *.tif

(ध्यान दें कि कि एक का नाम बदल जाएगा blah.tiffany.tifकरने के लिए blahfany.tif)


2
मेरा मानना ​​है कि "डेबियन" का नाम लैरी वॉल (पर्ल के साथ आता है?) और "रेड हैट" का उपयोग-लिनेक्स (डेबियन IIRC में नाम बदलें) से है।
XTL

@XTL: सच है। मैं उन्हें सिर्फ इसलिए बुलाता हूं क्योंकि वे डेबियन या रेड हैट डेरिवेटिव्स में पाए जाने वाले "रीनेम" प्रोग्राम हैं।
इग्नासियो वाज़केज़-अब्राम्स

बहुत बहुत धन्यवाद! मुझे कभी एहसास नहीं हुआ कि 'नाम बदलने' के अलग-अलग संस्करण थे। मुझे लगता है कि डेबियन और रेडहैट में कमांड के बीच अन्य सूक्ष्म अंतर हैं। मुझे उनके कुछ अंतर देखने होंगे।
पॉल

दूसरी कमांड के परिणामस्वरूप सिंटैक्स अमान्य था, लेकिन पहले एक ने काम किया।
HelloWorld

6

बिना नाम बदले, आप कर सकते हैं:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-आई एक फ़ाइल की जगह के खिलाफ चेतावनी देने के लिए)


15
अधिक तेज़ संस्करण:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013

यहां अंतिम टिप्पणी पर +1। यह खाली जगहों के साथ फ़ाइल नाम पर अधिक सुरक्षित है।
पेटोबेंस

1
@ jw013 आपकी टिप्पणी एक शीर्ष-स्तरीय उत्तर होनी चाहिए।
रोलैंड

1
rename -- .oldext .newext *.oldext

यह नए के साथ पुराने विस्तार को प्रतिस्थापित करता है। विस्तार को हटाने के लिए आप तर्क के रूप में खाली स्ट्रिंग में स्पष्ट रूप से पास कर सकते हैं।

rename -- .gz.tmp  '' *.gz.tmp

उपरोक्त कमांड के साथ .gz.tmpवर्तमान फ़ोल्डर में एक्सटेंशन वाली सभी फ़ाइलों का नाम बदल दिया जाएगा filename.gz

लेख का संदर्भ लें: लिनक्स: विवरण के लिए कई फाइलों के लिए फ़ाइल एक्सटेंशन हटा दें


1
यह उस उपयोग-लिनेक्स कार्यान्वयन को मानता है, renameजिसमें से पारंपरिक renameकमांड से असंगत (और बहुत अधिक सीमित) है perl
स्टीफन चेज़लस

यह भी ध्यान दें कि यह फ़ाइल नाम के भीतर पहली घटना को प्रतिस्थापित करता है .oldext, जरूरी नहीं कि विस्तार ( foo.oldextasy.oldextइसका नाम बदलकर footasy.oldext) हो।
स्टीफन चेज़लस

1

यदि आप IBM AIX का उपयोग करते हैं rename, तो आपके पास कमांड नहीं होगी , इसलिए फ़ाइल एक्सटेंशन को बैच करने के लिए आपको सादे वेनिला सिस्टम VIX का उपयोग करना होगा:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

-2

क्या हम इसे पुनरावर्ती बना सकते हैं

for i in *.gz; do mv -i $i `basename $i .gz`; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.