আমার আগের প্রশ্নের অনুসরণ হিসাবে , যদি আমার ফর্মের একাধিক ফাইল থাকে
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.
সমস্ত ফাইলের মাঝখানে অপসারণ করতে আমি কোন আদেশটি ব্যবহার করতে পারি ?
\.
নিদর্শনগুলিতে অন্তর্ভুক্ত করেন কিনা ।
আমার আগের প্রশ্নের অনুসরণ হিসাবে , যদি আমার ফর্মের একাধিক ফাইল থাকে
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.
সমস্ত ফাইলের মাঝখানে অপসারণ করতে আমি কোন আদেশটি ব্যবহার করতে পারি ?
\.
নিদর্শনগুলিতে অন্তর্ভুক্ত করেন কিনা ।
উত্তর:
আপনি সর্বশেষ প্রশ্নের উত্তরগুলির মোটামুটি ছোট সংশোধন করে এটি করতে পারেন:
rename s/ras\.// sw.ras.*
অথবা
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
ব্যাখ্যা:
rename
একটি perl
স্ক্রিপ্ট যা perl
নিয়মিত প্রকাশ এবং ফাইলগুলির একটি তালিকা গ্রহণ করে, প্রতিটি ফাইলের নামের পরিবর্তে রেজেেক্স প্রয়োগ করে এবং রেজেক্স প্রয়োগের ফলাফলের জন্য প্রতিটি ফাইলের নাম পরিবর্তন করে। আমাদের ক্ষেত্রে, ras
এটি আক্ষরিক সাথে মিলে যায় এবং \.
একটি আক্ষরিক সাথে মিলিত হয় .
(যেমন .
একা নতুন লাইন ব্যতীত অন্য কোনও চরিত্রকেই নির্দেশ করে), এবং এটি কিছু না দিয়ে প্রতিস্থাপন করে।
for
লুপ যে সমস্ত ফাইল দিয়ে শুরু নেয় sw.ras.
তাদের উপর (আদর্শ শেল উল্লিখিত glob) এবং লুপ। ${var/search/replace}
অনুসন্ধান $var
করে search
এবং এর সাথে প্রথম ঘটনাটি প্রতিস্থাপন করে replace
, তাই প্রথমটিকে সরানো প্রথম দিয়ে ${file/ras./}
ফিরে আসে । কমান্ড এইভাবে ফাইলটির একই নাম বিয়োগের নাম পরিবর্তন করে । নোট করুন যে এই অনুসন্ধান এবং প্রতিস্থাপনের সাথে, আক্ষরিকভাবে নেওয়া হয়েছে, বিশেষ চরিত্র হিসাবে নয়।$file
ras.
ras.
.
আর একটি বিকল্প হ'ল এমএমভি (ভর এমওভি এবং নতুন নাম) ব্যবহার করা:
mmv '*ras.*' '#1#2'
আপনার নিদর্শনগুলির চারপাশে একক উদ্ধৃতি ব্যবহার করতে ভুলবেন না, অন্যথায় তারাগুলি শেল স্তরে প্রসারিত হবে।
ইউটিলিটি সবসময় পাওয়া যায় না তবে এটি না থাকলে আপনি এটি দিয়ে এটি ইনস্টল করতে পারেন:
sudo apt-get install mmv
ম্যান পৃষ্ঠাটি এখানে দেখুন ।
কোনো POSIX-অনুবর্তী শেল (ইন bash
, dash
, ksh
, ইত্যাদি):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
বা এর সাথে rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
আমাকে সম্প্রতি বেশ কয়েকটি ফাইলের একটি বাল্কের পুনরায় নামকরণ করতে হয়েছিল যেখানে আমাকে একটি অক্ষরের সর্বশেষ উপস্থিতিটি প্রতিস্থাপন করতে হয়েছিল যেখানে ফাইলের নামের মধ্যে অক্ষরটি একাধিকবার ঘটেছে। এই বিশেষ ক্ষেত্রে আমাকে শেষ ড্যাশটিকে -
আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে হবে _
, এটি ঘুরিয়ে:
some-long-file-name.ext
এটিতে:
some-long-file_name.ext
এটি কিছু সময় নিয়েছিল তবে এটি শেষ পর্যন্ত এটি করেছে:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
এখানে:
${i%-*}
ড্যাশটির শেষ ঘটনাটি পর্যন্ত ফাইলের নামের সাথে মেলে -
${file##*-}
ড্যাশটির শেষ ঘটনাটির পরে ফাইলটির বাকি ফাইলটির সাথে মেলে -
ras
, অর্থাত্ দিয়ে শেষsw..001
, অথবাras.
চলেইsw.001
?