উত্তর:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
এর মাধ্যমে ইনপুট ফাইলের নাম থেকে প্রথম 6 অক্ষর মুছে ফেলার জন্য ব্যাশ কমান্ড প্রতিকল্পন ব্যবহার cut, prepends CLফলাফলের জন্য, এবং দোকান যে $newname। তারপরে এটি পুরানো নামটির নতুন নামকরণ করে। এটি প্রতিটি ফাইলে সম্পাদিত হয়।
cut -c7-নির্দিষ্ট করে যে ইনডেক্স 7 পরে কেবল অক্ষরগুলি ইনপুট থেকে ফিরে আসতে হবে। 7-সূচি 7 এ শুরু হওয়া একটি পরিসীমা নয় যার শেষ রয়েছে; অর্থাৎ লাইন শেষ হওয়া অবধি।
পূর্বে, আমি ব্যবহার করেছিলাম cut -b7-, তবে -cপরিবর্তে ইউটিএফ -8 এর মতো অক্ষর প্রতি একাধিক বাইট থাকতে পারে এমন অক্ষর এনকোডিংগুলি পরিচালনা করতে ব্যবহার করা উচিত।
আমি কেবল সহজ renameকমান্ডটি ব্যবহার করতে চাই যা অনেক লিনাক্স বিতরণে প্রচলিত। এই কমান্ডের দুটি সাধারণ সংস্করণ রয়েছে সুতরাং আপনার কোনটি রয়েছে তা খুঁজে পেতে এর ম্যান পৃষ্ঠাটি পরীক্ষা করুন:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
আপনি যদি কোনও ডেবিয়ান সিস্টেমে ইউজার-লিনাক্স-এনজি থেকে সংস্করণটি ব্যবহার করতে চান তবে এটি নাম অনুসারে উপলভ্য rename.ul
renameবন্য মধ্যে একাধিক সংস্করণ বিদ্যমান। renameকীভাবে আপনার নিজের ব্যবহার করবেন তা নির্ধারণ করতে আপনার স্থানীয় ডকুমেন্টেশন পরীক্ষা করুন ।
rename TestSR '' *
rename "\<pre\>" "" *->Unterminated <> operator at (user-supplied code).
শেল প্যারামিটার সম্প্রসারণ এর মতো সহজ রূপান্তরগুলির জন্য যথেষ্ট। অতিরিক্ত প্রক্রিয়া চালানোর প্রয়োজনীয়তার কারণে কমান্ড প্রতিস্থাপন কম দক্ষ হয় (কমান্ড প্রতিস্থাপনের জন্য এবং cut/ sed)।
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*ফাইলগুলি সন্ধান করে, CL${f#TestSR}নতুন নাম হবে। উইলের পরে #থাকা স্টাফগুলি ফাইলের নাম ( f) থেকে প্রতিস্থাপন করা হবে ।
এখানে একটি উপায়:
ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
ls *.{h,m} -> .h বা .m এক্সটেনশন সহ সমস্ত ফাইল সন্ধান করুনn=CL -> ফাইলের নামের সাথে একটি সিএল উপসর্গ যুক্ত করুনsed -e 's/^Test//' -> ফাইলের নাম থেকে পরীক্ষার উপসর্গ সরিয়ে দেয়mv $a $n -> নামটি সম্পাদন করেআপনি এটি দিয়ে চেষ্টা করতে পারেন:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
দেখুন man bashবিস্তারিত জানার জন্য (অধ্যায় "প্যারামিটারটি সম্প্রসারণ")।
ঠিক আছে, যদিও এটি আমার মতো কঠিন ছিল না।
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh], for f in TestSR*.{m,h}, for f in TestSR*.m TestSR*.h।
আপনার যদি আরও জটিল কিছু প্রয়োজন হয় তবে আপনি এটি করতে পারেন
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *