ফাইলের নামে শব্দটি প্রতিস্থাপন করে একাধিক ফাইলের নাম কীভাবে রাখবেন?


36

এসিডিসিকে এসি-ডিসিতে প্রতিস্থাপন করুন

উদাহরণস্বরূপ আমাদের কাছে এই ফাইলগুলি রয়েছে

এসিডিসি - রক এন 'রোল শব্দের দূষণ.এক্সএক্সএক্সএক্স নয়

এসিডিসি - রকার.এক্সএক্সএক্সএক্স

এসিডিসি - শুট টু থ্রিল.এক্সএক্সএক্স

আমি তাদের হয়ে উঠতে চাই:

এসি-ডিসি - রক এন 'রোল শব্দের দূষণ.এক্সএক্সএক্সএক্স নয়

এসি-ডিসি - রকার.এক্সএক্সএক্সএক্স

এসি-ডিসি - শুট টু থ্রিল.এক্সএক্সএক্স

আমি জানি যে এই অপারেশনের জন্য সেড বা অজক ব্যবহৃত হয়। আমি কোনও গুগল করতে পারছি না তাই আমি আপনার সহায়তা চাইছি =) আপনি কি দয়া করে এই কাজের জন্য পূর্ণ শেল কমান্ড সরবরাহ করতে পারেন?

প্রতিক্রিয়া: ওএসএক্স ব্যবহারকারীদের জন্য সমাধান


1
আমার মনে হচ্ছে এখানে আরও বড় প্রশ্ন রয়েছে - আপনি কি এমপি 3 ফাইলের নাম ঠিক করার চেষ্টা করছেন? এটি করার জন্য বহু বছর ধরে লোকেরা লিখিত বেশ কয়েকটি স্ক্রিপ্ট রয়েছে। আমি মনে করি যে আমি ব্যবহার করেছি তাকে ডাকা হয়েছিল mp3fixer
ফিল হলেনব্যাক

না এটি এমপি 3 এর সম্পর্কে নয়, আমি কেবল একই ধরণের নাম সহ কয়েকটি বিশাল ফাইল পরিচালনা করতে হবে, এবং সমস্ত কিছুর অবশ্যই প্রতিস্থাপন বা স্থির করতে হবে ... সাধারণ পরিস্থিতি তাই তাদের সকলের নাম পরিবর্তনের জন্য আমার এই নিফটি সমাধানটি প্রয়োজন
হোলস

উত্তর:


45
rename 's/ACDC/AC-DC/' *.xxx

থেকে man rename

DESCRIPTION
       "rename" renames the filenames supplied according to the rule specified as the 
first argument.  The perlexpr argument is a Perl expression which is expected to modify the 
$_ string in Perl for at least some of the filenames specified.  If a given filename is not 
modified by the expression, it will not be renamed.  If no filenames are given on
           the command line, filenames will be read via standard input.

উদাহরণস্বরূপ, এক্সটেনশানটি স্ট্রিপ করতে "* .বাক" এর সাথে মেলে সমস্ত ফাইলের নাম পরিবর্তন করতে, আপনি বলতে পারেন

rename 's/\.bak$//' *.bak

বড় হাতের নামগুলি নিম্নে অনুবাদ করতে, আপনি ব্যবহার করবেন

rename 'y/A-Z/a-z/' *

5
নোট করুন যে অনেকগুলি লিনাক্স মেশিন ইউজ -লিনাক্সের নতুন নাম নিয়ে আসে, যা রেগেক্সগুলি নয় বরং সহজ বিকল্প প্রয়োগ করে । সুতরাং যদি কিছু না করেই যদি নামটি নিঃশব্দে ব্যর্থ হয় তবে আপনি সম্ভবত ভুলটি ব্যবহার করছেন rename
ফিল হলেনব্যাক

আমি যুগ যুগ ধরে এটি অনুসন্ধান করছিলাম! thnx!
11'14

@ ফিলহোলেনব্যাক ঠিক কীভাবে খুঁজে পাবেন / ইনস্টল করবেন? :)
হেনরি

আমি যখন ফাঁকা জায়গাগুলির পরিবর্তে আমার ফাইলের নামগুলিতে আন্ডারস্কোর করি তখন এটি কাজ করে না - আমি কীভাবে এটি সমাধান করব?
আনফা

13

এই উত্তরটি অন্য সমস্ত উত্তর থেকে ভাল অংশ রয়েছে, যখন এইরকম ধর্মবিরোধী ls | while read

বর্তমান ডিরেক্টরি:

for file in ACDC*.xxx; do
    mv "$file" "${file//ACDC/AC-DC}"
done

উপ-ডিরেক্টরি সহ:

find . -type f -name "ACDC*" -print0 | while read -r -d '' file; do
    mv "$file" "${file//ACDC/AC-DC}"
done

নিউলাইন অক্ষরগুলি ফাইলের নামগুলিতে হওয়ার সম্ভাবনা খুব কম, তাই স্পেস যুক্ত নামগুলির সাথে কাজ করার সময় এটি আরও সহজ হতে পারে:

find . -type f -name "ACDC*" | while read -r file; do
    mv "$file" "${file//ACDC/AC-DC}"
done

9

renameউল্লিখিত ফিলের ইউট-লিনাক্স সংস্করণটি ব্যবহার করতে (উবুন্টুতে, এটি বলা হয় rename.ul):

rename ACDC AC-DC ACDC*

অথবা

rename.ul ACDC AC-DC ACDC*

1
আপনার রূপটি সেরা =) গুগলে অনেকগুলি বোকা নিবন্ধগুলি অনুসন্ধান এবং প্রেরণ এবং বিশৃঙ্খলা সম্পর্কে ... এই সাধারণ অপারেশনে যার জন্য ইতিমধ্যে নতুন নামকরণের নামকরণ করা হয়েছে!
হলমা

4

ব্যাশ শেল ব্যবহার করে

find . -type f -name "ACDC*" -print0 | while read -d $'\0' f
do
   new=`echo "$f" | sed -e "s/ACDC/AC-DC/"`
   mv "$f" "$new"
done

দ্রষ্টব্য: ব্যবহার findকরে বর্তমান ডিরেক্টরি এবং এর অধীন ডিরেক্টরিগুলি প্রক্রিয়া করা হবে।


1

আপনার শেল উপর নির্ভর করে। Zsh এ, আমি এটি করতাম:

for file in ACDC*.xxx; do
    mv "$file" "$(echo $file | sed -e 's/ACDC/AC-DC/')"
done

সম্ভবত সেরা সমাধান নয়, তবে কাজ করে।


1

ব্যাশ ব্যবহার:

ls *.xxx | while read fn; do
    mv "${fn}" "${fn/ACDC/AC-DC}";
done

আপনি যদি renameপ্রোগ্রামটি ইনস্টল করেন:

rename 's/ACDC/AC-DC/' *.xxx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.