ध्यान दें कि आप डेबियन और डेरिवेटिव्स (उबंटू, मिंट,…) द्वारा वितरित पर्ल स्क्रिप्टrename का उपयोग कर रहे हैं । अन्य लिनक्स वितरण एक पूरी तरह से अलग जहाज, और काफी कम उपयोगी, कमांड कहा जाता है rename।
y/A-Z/a-z/सीमा में प्रत्येक चरित्र तब्दील Aके माध्यम से Zश्रृंखला में इसी चरित्र में aके माध्यम से z, इसी छोटा अक्षर को यानी ASCII बड़े अक्षरों का। विपरीत अनुवाद करने के लिए, का उपयोग करें y/a-z/A-Z/। एक अन्य तरीका है एक ही आदेश है लिखने के लिए rename '$_ = uc($_)' *- ucहै यू pper ग ase समारोह, और renameआदेश के लिए किए गए परिवर्तन के आधार पर फ़ाइलों का नाम बदलता $_चर।
rename '…' *केवल वर्तमान निर्देशिका में फ़ाइलों का नाम बदल देता है, क्योंकि यही *मेल खाता है। डॉट फाइलें (जिनके नाम से शुरू होती है .) को भी छोड़ दिया जाता है।
यदि आप वर्तमान निर्देशिका में और उपनिर्देशिकाओं में फ़ाइलों का नाम बदलना चाहते हैं, तो आप findवर्तमान निर्देशिका को पुनरावृत्ति करने के लिए कमांड का उपयोग कर सकते हैं । यहां एक कठिनाई है: यदि आप कॉल करते हैं rename, तो यह निर्देशिका और आधार नाम भाग दोनों का नाम बदल देता है। यदि आप renameइसे वापस लेने से पहले किसी निर्देशिका पर कॉल करते हैं ( find -exec rename … {} \;), findतो भ्रमित हो जाता है क्योंकि यह एक निर्देशिका मिली है, लेकिन यह निर्देशिका अब उस समय तक मौजूद नहीं है जब तक इसमें उतरने की कोशिश नहीं की जाती है। आप इस findपर अभिनय करने से पहले किसी डायरेक्टरी को ट्रेस करने के लिए कहकर इसके आसपास काम कर सकते हैं , लेकिन फिर आप नाम बदलने foo/barका प्रयास करते हैं, लेकिन FOO/BARडायरेक्टरी FOOमौजूद नहीं है।
इस कठिनाई से बचने का एक सरल तरीका यह है कि नाम बदलने का कार्य केवल पथ के आधार नाम भाग पर किया जाए। नियमित अभिव्यक्ति ([^/]*\Z)उस पथ के अंतिम भाग से मेल खाती है जिसमें ए नहीं है /।
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
खोल zsh नाम बदलने के लिए और अधिक सुविधाजनक सुविधाएँ प्रदान करता है - पर्ल से भी अधिक गूढ़, लेकिन मरोड़ने वाला और अक्सर रचना करने में आसान।
फ़ंक्शन zmvपैटर्न के आधार पर फ़ाइलों का नाम बदल देता है। autoload -U zmvइसे सक्रिय करने के लिए एक बार चलाएं (इस लाइन को अपने में रखें .zshrc)।
पहले तर्क में zmv(बदलने के लिए पैटर्न), आप ज़ीश के शक्तिशाली वाइल्डकार्ड पैटर्न का उपयोग कर सकते हैं । zmv(प्रतिस्थापन पाठ) के दूसरे तर्क में , आप इतिहास संशोधक सहित इसके पैरामीटर विस्तार सुविधाओं का उपयोग कर सकते हैं ।
zmv -w '**/*' '$1$2:u'
स्पष्टीकरण:
-w - प्रत्येक वाइल्डकार्ड पैटर्न पर स्वचालित असाइन किए गए संख्यात्मक चर
**/*- उपनिर्देशिकाओं में सभी फाइलें, पुनरावर्ती रूप से ( **/उपश्रेणियों के 0, 1 या अधिक स्तरों से मेल खाती हैं)
$1 - पहला सांख्यिक चर, यहाँ प्रत्येक पथ के निर्देशिका भाग से मेल खाता है
$2:u- दूसरा न्यूमेरिक वैरिएबल, यहां प्रत्येक पथ के आधार नाम भाग का मिलान करते हुए, :uमान को अपरकेस में बदलने के लिए संशोधक के साथ
एक अतिरिक्त बोनस के रूप में, यह परिवेशी लोकेल सेटिंग्स का सम्मान करता है।
यदि आप zmvलिखी गई कमांड के बारे में निश्चित नहीं हैं , तो आप यह -nप्रिंट करने का विकल्प पास कर सकते हैं कि कमांड क्या करेगी और कुछ भी नहीं बदलेगी। आउटपुट की जाँच करें, और यदि आप जो चाहते हैं वह करते हैं, तो -nवास्तव में कार्य किए बिना कमांड को फिर से चलाएं ।
rename 'y/a-z/A-Z/' *हैं तो आपको वही मिलेगा जो आप चाहते हैं। सावधान जहाँ आप इसके माध्यम से परीक्षण करते हैं।