আমি তিনটি বিকল্প প্রস্তাব করতে যাচ্ছি। প্রত্যেকটি একটি সাধারণ সিঙ্গল লাইন কমান্ড, তবে আমি আরও জটিল ক্ষেত্রে ভেরিয়েন্ট সরবরাহ করব, মূলত যদি প্রক্রিয়া করার ফাইলগুলি একই ডিরেক্টরিতে অন্য ফাইলগুলির সাথে মিশ্রিত হয়।
mmv
আমি একই নামের প্যাকেজ
থেকে এমএমভি কমান্ডটি ব্যবহার করব :
mmv '*HBO_DPM*' '#1dpm#2'
নোট করুন যে আর্গুমেন্টগুলি স্ট্রিং হিসাবে পাস হয়েছে, সুতরাং শেলবে গ্লোব সম্প্রসারণ ঘটে না। কমান্ডটি ঠিক দুটি আর্গুমেন্ট গ্রহণ করে এবং তারপরে ফাইলের সংখ্যার উপর কোন সীমাবদ্ধতা ছাড়াই অভ্যন্তরীণভাবে সম্পর্কিত ফাইলগুলি সন্ধান করে। এছাড়াও নোট করুন যে উপরের কমান্ডটি ধরে নিয়েছে যে প্রথম গ্লোবের সাথে মেলে সমস্ত ফাইলের নাম পরিবর্তন করা হবে। অবশ্যই আপনি আরও নির্দিষ্ট হতে পারেন:
mmv 'sb_606_HBO_DPM_*' 'sb_606_dpm_#1'
যদি আপনার একই ডিরেক্টরিতে অনুরোধ করা নম্বর সীমার বাইরে ফাইল থাকে তবে আপনি এই উত্তরটিতে আরও নীচে দেওয়া সংখ্যার লুপটি দিয়ে ভাল হতে পারেন। তবে আপনি উপযুক্ত প্যাটার্ন সহ এমএমভি আমন্ত্রণগুলির ক্রমটিও ব্যবহার করতে পারেন:
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))
বন্ধনী সম্প্রসারণের বিপরীতে কিছু বাশ কয়েক বছর আগে মুক্তি পেয়েছে বলে নেতৃস্থানীয় শূন্যগুলি পরিচালনা করে। আসলে আমি পরিবর্তনের জন্য অনুরোধ করেছি, তাই এর ব্যবহারের ক্ষেত্রে আমি খুশি see
আরও পড়ুন: বাশ তথ্য পৃষ্ঠাগুলিতে বিশেষত অংশটির ব্রেস প্রসারণ{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}
দীর্ঘতম উপসর্গটি মিলছে । সেই দীর্ঘতম উপসর্গটিকে কোনও কিছুর পরে আন্ডারস্কোর, তারপরে শূন্য বা আরও বেশি শূন্য হিসাবে সংজ্ঞায়িত করা হয়। পরবর্তীটি লিখিত হিসাবে এটি একটি বর্ধিত গ্লোব প্যাটার্ন যা বিকল্পটি সেট করা হচ্ছে তার উপর নির্ভর করে । শীর্ষস্থানীয় শূন্যগুলি সরিয়ে ফেলতে সংখ্যাটি বেস 10 হিসাবে নয় বলে বিবেচনা করা গুরুত্বপূর্ণ 8 লুপ আর্গুমেন্টে আরেকটি প্রসারিত গ্লোব, এক বা একাধিক সংখ্যার সাথে মিলে যাওয়া, যদি আপনার সেখানে ফাইলগুলি একই শুরু হয় তবে শেষ হয় না সংখ্যা।pattern
$i
*(0)
extglob
+([0-9])
ARG_MAX
সীমাবদ্ধতার সাথে সংঘর্ষের কারণে অন্যান্য প্রশ্নের বেশিরভাগ সিএলআই উত্তর এখানে কাজ করবে না । যেহেতু এই প্রশ্নটি স্পষ্টভাবে একটি কমান্ড-লাইন সমাধান চেয়েছে, (সম্ভবত সমান) জিইউআই সমাধানগুলি অন্য প্রশ্নের মতোও মেলে না।