अपने विशिष्ट मामले में आप निम्न bash
आदेश का उपयोग कर सकते हैं ( bash
macOS पर डिफ़ॉल्ट शेल है):
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
- सच्चे नियमित अभिव्यक्ति का उपयोग किया जाता है।
[१] विशेष तर्क का उद्देश्य --
, जो अधिकांश उपयोगिताओं द्वारा समर्थित है, यह संकेत देना है कि बाद के तर्कों को ऑपरेंड (मान) के रूप में माना जाना चाहिए , भले ही वे शुरू करने के कारण विकल्पों की तरह दिखते हों , जैसा कि जैकब सी।-
।