रेगेक्स का उपयोग करके मैं बहुत सारी फ़ाइलों का नाम कैसे बदल सकता हूं?


20

मैं मैक ओएस एक्स (10.7.2) पर बहुत सारी फ़ाइलों का नाम बदलना चाहता हूं .. मेरे पास renameकमांड के लिए पर्ल पैकेज नहीं है ।

मेरी फाइलों में "T452-102456-0.png" जैसे नाम हैं और मैं "-0" भाग को हटाना चाहता हूं। मुझे पता है कि मैं अपनी php-cli स्क्रिप्ट लिखकर यह कार्रवाई कर सकता हूं, लेकिन मैं एक आसान और तेज समाधान जानना चाहूंगा।


क्या "बहुत सारी पीडीएफ फाइलें" और "मेरी फाइलों में" T452-102456-0.png "जैसे नाम के बीच कोई तार्किक विरोधाभास नहीं है?"
मैनटवर्क

ओह ... फ़ाइलों का प्रकार कोई फर्क नहीं पड़ता, लेकिन यह सत्य है ^ ^। मैं संपादित करता हूं, आपकी टिप्पणी के लिए धन्यवाद =)
राफेल

जवाबों:


21

बैश या क्ष को एक साथ mvहल कर सकता है:

for f in *.png; do mv -n "$f" "${f/-0}"; done

यदि फ़ाइल का नाम पहले डैश के बाद भी "0" हो सकता है और "-0" हमेशा डॉट के सामने होता है, तो आप उस डॉट को अभिव्यक्ति में भी शामिल करना चाह सकते हैं:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

लेकिन उस का नाम बदलने नियम के रूप में सरल, अगर आपके पास है renameसे util-linux पैकेज, कि यह भी करना होगा:

rename '-0.' '.' *.png

यह पूरी तरह से काम करता है। बहुत बहुत धन्यवाद =)
राफेल

3

सरल विधि: केवल वर्तमान निर्देशिका में फ़ाइलें

Zsh के साथ:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

अन्य गोले के साथ:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


बढ़ी हुई विधि: वर्तमान निर्देशिका और / या उपनिर्देशिकाओं में फाइलें

Zsh के साथ:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Ksh93 के साथ:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

बैश b4 के साथ, जैसा कि ऊपर है, लेकिन कमांड के shopt -s globstarबजाय उपयोग करें set

अन्य गोले के साथ:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

zsh स्थापित करने का एक और बड़ा कारण:) .... zmv
danidee


0

यदि आपके पास mmvपैकेज है:

mmv '*-0.png' '#1.png'

जैसे (हाल के संस्करण) rename, यह मौजूदा फ़ाइलों को अधिलेखित करने से बचने के लिए उचित देखभाल करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.