मैं तीन विकल्प सुझाने जा रहा हूं। प्रत्येक एक सरल सिंगल लाइन कमांड है, लेकिन मैं अधिक जटिल मामलों के लिए वेरिएंट प्रदान करूंगा, मुख्य रूप से मामले में प्रोसेस करने के लिए फाइलें उसी निर्देश में अन्य फाइलों के साथ मिश्रित होती हैं।
mmv
मैं उसी नाम
के पैकेज से mmv कमांड का उपयोग करूंगा :
mmv '*HBO_DPM*' '#1dpm#2'
ध्यान दें कि तर्क तार के रूप में पारित किए जाते हैं, इसलिए गोला विस्तार शेल में नहीं होता है। कमांड वास्तव में दो तर्कों को प्राप्त करता है, और फिर फ़ाइलों की संख्या पर तंग सीमा के बिना आंतरिक रूप से संबंधित फ़ाइलों को पाता है। यह भी ध्यान दें कि ऊपर दी गई कमांड मानती है कि पहली ग्लोब से मेल खाने वाली सभी फाइलों का नाम बदल दिया जाएगा। बेशक आप अधिक विशिष्ट होने के लिए स्वतंत्र हैं:
mmv 'sb_606_HBO_DPM_*' 'sb_606_dpm_#1'
यदि आपके पास एक ही निर्देशिका में अनुरोधित संख्या सीमा के बाहर की फाइलें हैं, तो आप इस उत्तर में और नीचे दिए गए संख्याओं के लूप से बेहतर हो सकते हैं। हालाँकि आप उपयुक्त पैटर्न के साथ mmv इनवोकेशन के अनुक्रम का भी उपयोग कर सकते हैं:
mmv 'sb_606_HBO_DPM_0089*' 'sb_606_dpm_0089#1' # 0089000-0089999
mmv 'sb_606_HBO_DPM_009*' 'sb_606_dpm_009#1' # 0090000-0099999
mmv 'sb_606_HBO_DPM_01[0-5]*' 'sb_606_dpm_01#1#2' # 0100000-0159999
mmv 'sb_606_HBO_DPM_016[0-2]*' 'sb_606_dpm_016#1#2' # 0160000-0162999
mmv 'sb_606_HBO_DPM_01630[01]?' 'sb_606_dpm_01630#1#2' # 0163000-0163019
mmv 'sb_606_HBO_DPM_016302[0-2]' 'sb_606_dpm_016302#1' # 0163020-0163022
संख्या पर लूप
यदि आप कुछ भी स्थापित करने से बचना चाहते हैं, या इस सीमा के बाहर मैच से बचने के लिए नंबर रेंज द्वारा चयन करने की आवश्यकता है, और आप 74,023 कमांड इनवोकेशन की प्रतीक्षा करने के लिए तैयार हैं, तो आप एक सादे बैश लूप का उपयोग कर सकते हैं:
for i in {0089000..0163022}; do mv sb_606_HBO_DPM_$i sb_606_dpm_$i; done
यह विशेष रूप से अच्छी तरह से यहाँ काम करता है क्योंकि अनुक्रम में कोई अंतराल नहीं हैं। अन्यथा आप जांच सकते हैं कि स्रोत फ़ाइल वास्तव में मौजूद है या नहीं।
for i in {0089000..0163022}; do
test -e sb_606_HBO_DPM_$i && mv sb_606_HBO_DPM_$i sb_606_dpm_$i
done
ध्यान दें कि for ((i=89000; i<=163022; ++i))
ब्रेस विस्तार के विपरीत कुछ साल पहले कुछ बैश रिलीज होने के बाद से अग्रणी शून्य को संभालता है। वास्तव में एक परिवर्तन जिसका मैंने अनुरोध किया था, इसलिए मैं इसके लिए उपयोग के मामलों को देखकर खुश हूं।
आगे पढ़ने: बैश जानकारी पृष्ठों में ब्रेस विस्तार , विशेष रूप से के बारे में हिस्सा {x..y[..incr]}
।
फाइलों पर लूप
एक अन्य विकल्प एक उपयुक्त ग्लोब पर लूप करना होगा, इसके बजाय प्रश्न में पूर्णांक सीमा पर लूपिंग के बजाय। कुछ इस तरह:
for i in *HBO_DPM*; do mv "$i" "${i/HBO_DPM/dpm}"; done
फिर से यह mv
प्रति फ़ाइल एक मंगलाचरण है। और फिर से लूप तत्वों की एक लंबी सूची से अधिक है, लेकिन पूरी सूची को एक उपप्रकार के तर्क के रूप में पारित नहीं किया गया है, लेकिन आंतरिक रूप से बैश द्वारा संभाला जाता है, इसलिए यह सीमा आपको समस्याओं का कारण नहीं बनेगी।
आगे पढ़ना: बैश जानकारी पृष्ठों में शेल पैरामीटर विस्तार , ${parameter/pattern/string}
दूसरों के बीच दस्तावेजीकरण ।
यदि आप अपने द्वारा प्रदत्त संख्या सीमा को सीमित करना चाहते हैं, तो आप उसके लिए एक चेक जोड़ सकते हैं:
for i in sb_606_HBO_DPM_+([0-9]); do
if [[ "${i##*_*(0)}" -ge 89000 ]] && [[ "${i##*_*(0)}" -le 163022 ]]; then
mv "$i" "${i/HBO_DPM/dpm}"
fi
done
यहाँ ${i##pattern}
से सबसे लंबे उपसर्ग को हटाता pattern
है $i
। उस सबसे लंबे उपसर्ग को कुछ के रूप में परिभाषित किया जाता है, फिर एक अंडरस्कोर, फिर शून्य या अधिक शून्य। उत्तरार्द्ध को लिखा गया है, *(0)
जो एक विस्तारित ग्लोब पैटर्न है जो सेट किए जा रहे extglob
विकल्प पर निर्भर करता है । प्रमुख शून्य को हटाना संख्या 10 को आधार मान लेना महत्वपूर्ण है। आधार 8. +([0-9])
लूप तर्क में एक और विस्तारित ग्लोब है, जो एक या एक से अधिक अंकों से मेल खाता है, बस आपके पास वहीं फाइलें हैं जो शुरू होती हैं लेकिन अंत में समाप्त नहीं होती हैं नंबर।
ARG_MAX
सीमा के साथ बड़ी संख्या में फाइल टकराने के कारण अन्य प्रश्नों पर अधिकांश CLI उत्तर यहां काम नहीं करेंगे । जैसा कि यह प्रश्न स्पष्ट रूप से कमांड-लाइन समाधान के लिए पूछता है, (संभवतः बराबर) जीयूआई समाधान जैसा कि अन्य प्रश्न में भी मेल नहीं खाता है।