एक पंक्ति कमांड के साथ फ़ाइलों का नाम बदलें


10

मेरे पास यह निर्देशिका है, और फ़ाइलों का नाम बदलना चाहते हैं:

===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg

परिणाम इस तरह दिखना चाहिए:

===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...

मैं इसे सामान्य शेल टूल्स के साथ हल करना चाहूंगा।


1
मैं इसे सामान्य शेल टूल्स के साथ हल करना चाहूंगा। मैं यह नहीं कह रहा हूं कि आपके पास एक अच्छा कारण नहीं है, लेकिन मुझे विश्वास है कि आपने खुद से एक सवाल पूछा है और "क्यों?" पिछली बार मुझे एक समान समस्या थी जिसे हल करने के लिए मैंने तुरंत बैश को एक तरफ कर दिया और इसे पायथन में हल कर दिया। इतना आसान (लेकिन मुझे पहले से ही पता था कि पायथन, स्ट्रिंग तरीके, ग्लोब.ग्लोब और ओस.नाम - और मुझे भी रिक्त स्थान और अन्य अजीब पात्रों के साथ फ़ोल्डरनाम से भरे एक पेड़ को फिर से गिराना पड़ा, जिनमें से कोई भी अतिरिक्त का कारण नहीं है। परेशान अगर अजगर का उपयोग कर)
nigel222

1
@ nigel222 मैं आलसी हूं और मैं कम से कम अक्षर टाइप करना चाहता हूं। इसलिए मैं यहां अजगर का उपयोग नहीं करना चाहता। मुझे गलत मत समझो अब तक पायथन मेरी पसंदीदा प्रोग्रामिंग लैंग्वेज है और इसे रोजाना इस्तेमाल करते हैं।
गुएतली

जवाबों:


18

आप उपयोग कर सकते हैं rename...

rename -n 's/^[0-9]+ - //' *

-nवास्तव में फ़ाइलों का नाम बदलने के लिए परीक्षण के बाद निकालें

व्याख्या

  • s/old/new/के oldसाथ बदलेंnew
  • ^ स्ट्रिंग की शुरुआत
  • [0-9]+ कुछ संख्या

रेगेक्स फूल किस तरह के renameउपकरण द्वारा समर्थित है । क्या यह पीसीआरई का उपयोग करता है? ... बहुत अच्छा होगा।
गुत्थी

5
@guettli सख्ती से बोल रहा हूँ, नहीं, यह पीसीआरई नहीं है (यह पर्ल कम्पेटिबल रेगुलर एक्सप्रेशंस है)। renameएक पर्ल स्क्रिप्ट तो यह पूर्ण पर्ल नियमित अभिव्यक्ति समर्थन हासिल है है; पीसीआरई उसका एक सबसेट है। हालाँकि, जो कुछ भी आप PCRE से जानते हैं वह लागू होगा rename
टेराडॉन

@terdon मुझे क्रियान्वयन की परवाह नहीं है। यदि आप इसे गणित के चश्मे से देखते हैं, तो इसके renameपास नियमित रूप से संगत अभिव्यक्ति है। हां, पीसीआर कार्यान्वयन का उपयोग नहीं किया जाता है। मुझे यह समझ में आया :-) आपके उत्तर के लिए धन्यवाद।
गुफ्तगू

9

bash प्रारंभ से आवश्यक भाग को अलग करने के लिए पैरामीटर विस्तार:

for f in *[[:blank:]]*.ogg; do echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

विस्तारित रूप:

for f in *[[:blank:]]*.ogg; do 
    echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"
done

echoड्राई-रनिंग के लिए है; वास्तविक कार्रवाई के लिए इससे छुटकारा पाएं:

for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

उदाहरण:

% ls -1
1 - 01 - Hoffnung.ogg
2 - 02 - Familie.ogg

% for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done 

% ls -1                                                                             
01 - Hoffnung.ogg
02 - Familie.ogg

हाँ, काम करता है। धन्यवाद। चूँकि मैं पायथन से नियमित रूप से संगत नियमित अभिव्यक्ति जानता हूं (जो मैं दैनिक उपयोग करता हूं), मैं renameकमांड पसंद करता हूं । (कम टाइपिंग की जरूरत)।
गुफ्तगू

1
renameयदि आप PCRE से परिचित हैं तो @guettli जाने का तरीका है; renameइस सवाल का जवाब पहले से ही ऐसा दिया गया था शुद्ध के साथ आगे बढ़ना है bash। बस ध्यान दें करने के लिए, pythonके re(या regex) मॉड्यूल नहीं पूरी तरह से PCRE संगत BTW है।
हेमायल

@guettli इसके अलावा क्या आपने मेरे जवाब को गलत ठहराया है? : ओ
हेमायल

हां, मैंने किया और मैंने आपकी टिप्पणी को गलत ठहराया। मुझे आशा है कि आप इसे व्यक्तिगत रूप से नहीं लेंगे। मुझे गलत मत समझो, लेकिन मेरी निजी राय है कि यह ${f#[[:digit:]]*-[[:blank:]]}बदसूरत है। हाँ यह काम करता है। लेकिन हम 21 वें दशक में रहते हैं। मुझे लगता है कि यह "काम करता है" से "यह आसान और मजेदार है" पर स्विच करने का समय है। यदि "यह काम करता है" लक्ष्य है, तो लिनक्स उपयोगकर्ता के अनुकूल नहीं होने के पूर्वाग्रह को कभी भी ढीला नहीं करेगा। चूंकि आपको पहले से ही बहुत अधिक वोट मिले हैं, इसलिए इस एक-डाउन वोट को चोट नहीं पहुंचनी चाहिए (मुझे उम्मीद है)। अगर ऐसा होता है, तो मुझे बताओ, और मैं इसे वापस ले जाऊंगा।
गुप्ताली

1
@guettli जो भी आपको सूट करता है। यहाँ: gnu.org/software/bash/manual/html_node/… बस ध्यान दें, चरित्र वर्ग [[:digit:]]और [[:blank:]]आपके अनुपालन के लिए वहाँ थे locale, ये रेगेक्स में भी बहुत आम हैं।
हेमायल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.