একটি অক্ষর বা স্ট্রিং সরিয়ে আমি কীভাবে একাধিক ফাইলের নাম পরিবর্তন করতে পারি?


21

আমার আগের প্রশ্নের অনুসরণ হিসাবে , যদি আমার ফর্মের একাধিক ফাইল থাকে

sw.ras.001
sw.ras.002
sw.ras.003
…

ras.সমস্ত ফাইলের মাঝখানে অপসারণ করতে আমি কোন আদেশটি ব্যবহার করতে পারি ?


আপনি সরাতে চান শুধুমাত্রras , অর্থাত্ দিয়ে শেষ sw..001, অথবা ras.চলেই sw.001?
কেভিন

আমি সম্ভবত 'রস' মুছে ফেলতে চাই। কমান্ড কি খুব আলাদা হবে?
পল

না, কেবল আপনি \.নিদর্শনগুলিতে অন্তর্ভুক্ত করেন কিনা ।
কেভিন

উত্তর:


35

আপনি সর্বশেষ প্রশ্নের উত্তরগুলির মোটামুটি ছোট সংশোধন করে এটি করতে পারেন:

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./}ফিরে আসে । কমান্ড এইভাবে ফাইলটির একই নাম বিয়োগের নাম পরিবর্তন করে । নোট করুন যে এই অনুসন্ধান এবং প্রতিস্থাপনের সাথে, আক্ষরিকভাবে নেওয়া হয়েছে, বিশেষ চরিত্র হিসাবে নয়।$fileras.ras..


আপনি অন্যদের কাছ থেকে শিখতে আপনার উত্তর ব্যাখ্যা করতে পারেন? "S / ras \ .// sw.ras। *" কি করবেন? আমার ধারণা আমি এটি জানি তবে আমি নিশ্চিত হতে চাই এবং অন্যরাও শিখতে পারে। দ্বিতীয় বিকল্প একইভাবে।
এইচ_7

1
@ এইচ_7 ভাল ধারণা, আমি একটি ব্যাখ্যা যুক্ত করেছি।
কেভিন

14

আর একটি বিকল্প হ'ল এমএমভি (ভর এমওভি এবং নতুন নাম) ব্যবহার করা:

mmv '*ras.*' '#1#2'

আপনার নিদর্শনগুলির চারপাশে একক উদ্ধৃতি ব্যবহার করতে ভুলবেন না, অন্যথায় তারাগুলি শেল স্তরে প্রসারিত হবে।

ইউটিলিটি সবসময় পাওয়া যায় না তবে এটি না থাকলে আপনি এটি দিয়ে এটি ইনস্টল করতে পারেন:

sudo apt-get install mmv

ম্যান পৃষ্ঠাটি এখানে দেখুন


1
এটি একটি দুর্দান্ত সরঞ্জাম !!!
খ্রিস্টান

5

কোনো 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:]]

1

আমাকে সম্প্রতি বেশ কয়েকটি ফাইলের একটি বাল্কের পুনরায় নামকরণ করতে হয়েছিল যেখানে আমাকে একটি অক্ষরের সর্বশেষ উপস্থিতিটি প্রতিস্থাপন করতে হয়েছিল যেখানে ফাইলের নামের মধ্যে অক্ষরটি একাধিকবার ঘটেছে। এই বিশেষ ক্ষেত্রে আমাকে শেষ ড্যাশটিকে -আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে হবে _, এটি ঘুরিয়ে:

some-long-file-name.ext

এটিতে:

some-long-file_name.ext

এটি কিছু সময় নিয়েছিল তবে এটি শেষ পর্যন্ত এটি করেছে:

for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done

এখানে:

  • ${i%-*} ড্যাশটির শেষ ঘটনাটি পর্যন্ত ফাইলের নামের সাথে মেলে -
  • ${file##*-} ড্যাশটির শেষ ঘটনাটির পরে ফাইলটির বাকি ফাইলটির সাথে মেলে -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.