উত্তর:
অন্যরা যেমন উল্লেখ করেছে, এতে rename
ভাল, তবে man rename
চেষ্টা করার আগে ম্যান পৃষ্ঠাটি ( ) পড়ুন। কমপক্ষে দুটি সম্পূর্ণ ভিন্ন সরঞ্জাম বলা হয়েছে rename
এবং এটি আপনার বিতরণের উপর নির্ভর করবে on তাদের ভুলভাবে কল করা বিপজ্জনক হতে পারে।
ল্যারি ওয়াল দ্বারা প্রাপ্ত পার্ল-ভিত্তিক সংস্করণের জন্য ম্যান পৃষ্ঠাটি যা উবুন্টু দিয়ে জাহাজে আসে। আপনি এটি একটি পার্ল মত প্রকাশ করুনrename 's/\.sql$/.php/' *.sql
পুরানো রেড হ্যাট এবং সেন্টস ডিস্ট্রিবিউশনের সাহায্যে পুনর্নবীকরণের জন্য ম্যান পৃষ্ঠাটি এখানে রয়েছে । ব্যবহারের মতো সরল স্ট্রিং প্রতিস্থাপনrename .sql .php *.sql
আপনি একবারে প্রতিটি ফাইল প্রক্রিয়া করতে ব্যাশ ওয়ান-লাইনার ব্যবহার করতে পারেন:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
ফাংশন নেই (অর্থাত্
রয়েছে rename(1)
, যা রেজেক্সগুলি ব্যবহার করে না, তবে আপনার সমস্যার সমাধান করতে পারে:
rename .sql .php *.sql
এছাড়াও আছে mmv(1)
, কিন্তু এটি কীভাবে কাজ করে তা সম্পর্কে আমি অপরিচিত।
/usr/bin/rename
লিঙ্কগুলি /usr/bin/prename
, যা রিজেক্সস নেয়।
গ দিন,
আপনি প্রবেশ করার চেষ্টা করতে পারেন
for i in $(\ls -d *.sql)
do
mv $i $(echo $i | sed -e 's/\.sql$/\.php/')
done
বা এটিকে পুনরায় ব্যবহারের পরিবর্তে এটিকে কিছুটা পরিবর্তন করুন
for i in $(\ls -d | egrep -e '.*\.sql')
do
mv $i $(echo $i | sed -e 's/\.sql$/\.php/')
done
শেল কোডিং মজা একটি বিট জন্য। (-:
ls
আউটপুট পার্স করা উচিত নয় ।
sed
উদাহরণস্বরূপ বেশ ভাল, যদিও।
প্লাম্বার হওয়ায় পাইপগুলি পছন্দ করি :)
দ্রষ্টব্য: এই উত্তরটি ভার্জোজ - একটি নবী হিসাবে আমি যখন তার প্রশংসা করি যখন কেউ জানেন সময় দেওয়ার জন্য সময় লাগে, তাই আমি 'ফরোয়ার্ড' প্রদান করছি। আপনি যদি নতুন হন না তবে দয়া করে দৈর্ঘ্য এবং ভার্বোসটিটি ক্ষমা করুন।
ls -1 *_201[67][0-9]* | sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/' | bash
কোথায়:
ls -1 *_201[67][0-9]*
প্যাটার্নের সাথে মিলে থাকা সমস্ত ফাইলের তালিকা করে, এক্ষেত্রে আমি ফাইলের সাথে তারিখের সাথে ফাইলগুলি 'YYYYMMDD' আকারে খুঁজছি
sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/'
# : | | | | | | | |: :
# : |^2....^ ^3..................^^4.......^ |: :
# :^1..............................................................^: :
# /................filename.................pattern................./...mkdir...and....mv...command.../
^ 1: 1 ম ক্যাপচার গ্রুপ - পুরো ফাইলের নাম
^ 2: 2 য় ক্যাপচার গ্রুপ - ফাইল নাম প্যাটার্নের প্রথম অংশ
^ 3: তৃতীয় ক্যাপচার গ্রুপ - ২ য় ফাইল নাম অংশ - এখানে 'YYYYMMDD' হিসাবে তারিখ
^ 4: 4 য় ক্যাপচার গ্রুপ - তারিখ এবং এক্সটেনশনের মধ্যে fileচ্ছিক ফাইল নাম অংশ এবং নিজেই এক্সটেনশান
Sooooo .... যদি আমার একটি ফাইল থাকে
CallLog_555123412_20161231-214403.7z
... তারপর
mkdir -p \2\/\3; mv \1 \2\/\3\/\1
আসলে মানে
# make directory and sub-directory
mkdir -p CallLog_555123412/20161231
# move file from current directory to sub-sub-directory just created
mv CallLog_555123412_20161231-214403.7z CallLog_555123412/20161231/CallLog_555123412_20161231-214403.7z
নোট করুন যে সেড কমান্ডের আউটপুট এটি কার্যকর করতে 'বাশ' এর মাধ্যমে পাইপ করা হয়। প্রথমে প্রস্তাবিত ফাইলটি সরানোর পরিবর্তে বাস্তবে সেগুলি সরানোর আগে, প্রথমে '| মুছে ফেলুন শেষে 'bash', এবং এটির মতো চেষ্টা করুন:
ls -1 *_201[67][0-9]* | sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/'
এটি মোটেও কোনও পরিবর্তন করবে না, তবে আপনি '| এর সাহায্যে এটি চালানো হলে আপনি যে আদেশটি কার্যকর করা হবে তা দেখতে পাবেন বাশ 'শেষে ট্যাগ।
এটি দরকারী কারণ আপনি ফাইলনামের অংশগুলি থেকে আপনি যে কোনও উপ-ডিরেক্টরি তৈরি করতে পারেন বা সেড কমান্ডের 'প্রতিস্থাপন' পাঠ্যে আপনি যে কোনও কিছু যুক্ত করতে পারেন। নোট করুন যে সেডের জন্য অনেকগুলি পালানোর অক্ষর প্রয়োজন।
এসইডি রেজেক্স বন্ধনী:
(...) ক্যাপচার গ্রুপিংয়ের জন্য পালাতে হবে -> \ (... \)
object m, n previous পূর্ববর্তী অবজেক্টের পরিমাণ নির্ধারণের জন্য পালানোর প্রয়োজন -> \ {m, n \}
/ প্রতিস্থাপন স্ট্রিংয়ের মধ্যে পলায়ন প্রয়োজন -> \ /
[...] চরিত্রের ক্লাসগুলির জন্য পালানোর দরকার নেই
প্রতিস্থাপনের স্ট্রিংয়ের 1 \ 1 তম দখলকৃত গোষ্ঠীকে বোঝায় এবং আরও ...
সুরক্ষা সতর্কতা: আপনি 'আউটসোমকে সম্পূর্ণরূপে বিবেচনা না করে' বাশ 'দেওয়ার জন্য আর কিছুই পাইবেন না ...
আশা করি যা কিছু বাধা মেটাতে সহায়তা করবে :)