अपने विशिष्ट मामले में आप निम्न bashआदेश का उपयोग कर सकते हैं ( bashmacOS पर डिफ़ॉल्ट शेल है):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
नोट: यदि कोई मौका है कि आपके फ़ाइलनाम के साथ शुरू होता है -, तो -- उनके सामने रखें [1]:
mv -- "$f" "${f/_*_/_}"
ध्यान दें: एक सूखा रन करने के echoलिए mvऐसा करने के लिए तैयार किया गया है। वास्तविक नाम बदलने के लिए इसे निकालें।
आप इसे कमांड लाइन से चला सकते हैं या स्क्रिप्ट में इसका उपयोग कर सकते हैं।
"${f/_*_/_}" का एक आवेदन है bash पैरामीटर विस्तार : (प्रथम) मिलान पैटर्न _*_को बदले में शाब्दिक के साथ बदल दिया जाता है_ , प्रभावी रूप से नाम से मध्य टोकन काट ।
- ध्यान दें कि
_*_एक पैटर्न है (वाइल्डकार्ड अभिव्यक्ति, जैसा कि ग्लोबिंग के लिए भी उपयोग किया जाता है), एक नियमित अभिव्यक्ति नहीं है (पैटर्न के बारे में जानने के लिए, रन करेंman bash और खोजें Pattern Matching)।
यदि आप अपने आप को बार-बार फ़ाइलों का नाम बदलकर पाते हैं, एक विशेष उपकरण जैसे पर्ल-आधारित renameउपयोगिता को स्थापित करने पर विचार करें । MacOS पर आप लोकप्रिय पैकेज मैनेजर होमब्रे का उपयोग करके इसे स्थापित कर सकते हैं:
brew install rename
यहां शीर्ष कमांड का उपयोग करते हुए बराबर है rename:
rename -n -e 's/_.*_/_/' *.png
फिर, यह कमांड एक सूखी रन करता है; -nवास्तविक नामकरण करने के लिए निकालें ।
bashसमाधान के समान ,s/.../.../ पाठ प्रतिस्थापन करता है, लेकिन - इसके विपरीत bash- सच्चे नियमित अभिव्यक्ति का उपयोग किया जाता है।
[१] विशेष तर्क का उद्देश्य --, जो अधिकांश उपयोगिताओं द्वारा समर्थित है, यह संकेत देना है कि बाद के तर्कों को ऑपरेंड (मान) के रूप में माना जाना चाहिए , भले ही वे शुरू करने के कारण विकल्पों की तरह दिखते हों , जैसा कि जैकब सी।- ।