ध्यान दें कि आप डेबियन और डेरिवेटिव्स (उबंटू, मिंट,…) द्वारा वितरित पर्ल स्क्रिप्ट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/' *
हैं तो आपको वही मिलेगा जो आप चाहते हैं। सावधान जहाँ आप इसके माध्यम से परीक्षण करते हैं।