2012-11-23 14 views
9

में डबल एक्सटेंशन हटाएं मैं नाम से परिचित हूं लेकिन मैं उत्सुक था कि डुप्लिकेट एक्सटेंशन को हटाने के लिए अभी भी नाम बदलना है ??बैश

  • picture2.jpg.jpg
  • picture9.jpg.jpg
  • picture3.jpg.jpg
  • picture6.jpg.jpg
:

मैं नामित कुछ फ़ाइलें कहो

डुप्लिकेट एक्सटेंशन को आप कैसे हटाएंगे ??

अंत परिणाम:

  • picture2.jpg
  • picture9.jpg
  • picture3.jpg
  • picture6.jpg

उत्तर

13

मान लिया जाये:

  • आप onl फिर निम्न स्क्रिप्ट काम करेंगे

: y इस वर्तमान कार्यशील निर्देशिका में (गैर पुनरावर्ती)

  • डबल एक्सटेंशन है प्रारूप ठीक .jpg.jpg के रूप में प्रदर्शन करना चाहते हैं

    #!/bin/bash 
    
    for file in *.jpg.jpg 
    do 
        mv "${file}" "${file%.jpg}" 
    done 
    

    स्पष्टीकरण:

    • ${file%.jpg}: यह हिस्सा कहा जाता है Parameter Subsitution.
    • उसी स्रोत से: "$ {var% पैटर्न} $ var से $ var से $ var के पीछे के अंत से मेल खाता है जो $ var के पीछे के अंत से मेल खाता है।"
    • ध्यान दें कि यहां वर्णित "पैटर्न" को ग्लोबिंग कहा जाता है, जो different from regular expression in important ways है। ./clean_de.sh
    द्वारा

    • यह chmod +x clean_de.sh
    • से निष्पादन योग्य है कि निर्देशिका
    • सेट में clean_de.sh नामक एक नई फ़ाइल बनाएँ तो यह चलाएँ:

    इस स्क्रिप्ट का उपयोग करने के लिए


    चेतावनी का एक नोट:

    रूप @gniourf_gniourf ने बताया है, -n विकल्प का उपयोग अपने mv यह समर्थन करता है तो।

    अन्यथा - अगर आप एक ही निर्देशिका में a.jpg और a.jpg.jpg है, यह a.jpg.jpga.jpg को नाम बदल देगा और इस प्रक्रिया में बिना किसी चेतावनी के पहले से ही विद्यमान a.jpg ओवरराइड।

  • +0

    वही है जो मुझे आपकी ज़रूरत है। मुझे लगता है कि परिवर्तन \% परिवर्तन कर रहा है? –

    +0

    यदि आपके 'एमवी' में' -n' विकल्प (कोई क्लॉबर विकल्प नहीं है), तो आप इसका उपयोग कर सकते हैं, बस लक्ष्य फ़ाइल पहले से मौजूद होने पर सुरक्षित होने के लिए। –

    4

    एक पंक्ति का नाम बदलें आदेश भी (अपने मामले के लिए कम से कम) पर्याप्त होना चाहिए:

    for oldName in `find . -name "*.*.*"`; do newName=`echo $oldName | rev | cut -f2- -d'.' | rev`; mv $oldName $newName; done 
    

    लघु विवरण:

    rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg 
    
    1

    यहाँ इस समस्या के लिए एक अधिक सामान्य, लेकिन अभी भी आसान उपाय है:
    find . -name "*.*.* - यह केवल डुप्लिकेट एक्सटेंशन के साथ फाइलें पाएगा

    echo $oldName | rev | cut -f2- -d'.' | rev - यह चाल यहां होती है: rev आदेश स्ट्रिंग पर एक रिवर्स करता है, इसलिए अब आप देख सकते हैं कि आप पूरे फ़ाइल नाम को पहले बिंदु से चाहते हैं। (Gpj.gpj.fdsa)

    mv $oldName $newName - वास्तव में फ़ाइलें

    रिलीज नोट्स का नाम बदलने का: के बाद से यह एक सरल एक-पंक्ति स्क्रिप्ट है, तो आप मामलों बिना क्रिया पा सकते हैं। फ़ाइल नाम, सुपर-गहरी निर्देशिका संरचनाओं आदि में अतिरिक्त बिंदु वाले फ़ाइलें