রেভেক্সের সাথে এমভিয়ের মতো লিনাক্স কমান্ড আছে কি?


41

উদাহরণস্বরূপ আমি চাই mv (.*?).sql $1.php,

এমন কোন কমান্ড আছে যা আমাকে নামকরণের ধরণগুলি নির্দিষ্ট করতে দেয়?

উত্তর:


32

অন্যরা যেমন উল্লেখ করেছে, এতে 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ফাংশন নেই (অর্থাত্
ব্যস্তবক্স

10

রয়েছে rename(1), যা রেজেক্সগুলি ব্যবহার করে না, তবে আপনার সমস্যার সমাধান করতে পারে:

rename .sql .php *.sql

এছাড়াও আছে mmv(1), কিন্তু এটি কীভাবে কাজ করে তা সম্পর্কে আমি অপরিচিত।


উবুন্টু এবং ডেবিয়ানে (অন্যান্য বিতরণ সম্পর্কে নিশ্চিত নয়), ডিফল্টরূপে /usr/bin/renameলিঙ্কগুলি /usr/bin/prename, যা রিজেক্সস নেয়।
haphink

5

গ দিন,

আপনি প্রবেশ করার চেষ্টা করতে পারেন

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

শেল কোডিং মজা একটি বিট জন্য। (-:


2
এটি তাদের নামের সাথে সাদা জায়গা থাকা ফাইলগুলিতে ব্যর্থ হয়, তাই সাবধান হন। কারও কখনই lsআউটপুট পার্স করা উচিত নয়
slhck

sedউদাহরণস্বরূপ বেশ ভাল, যদিও।
উজ্জ্বল-তারা

2

প্লাম্বার হওয়ায় পাইপগুলি পছন্দ করি :)

দ্রষ্টব্য: এই উত্তরটি ভার্জোজ - একটি নবী হিসাবে আমি যখন তার প্রশংসা করি যখন কেউ জানেন সময় দেওয়ার জন্য সময় লাগে, তাই আমি 'ফরোয়ার্ড' প্রদান করছি। আপনি যদি নতুন হন না তবে দয়া করে দৈর্ঘ্য এবং ভার্বোসটিটি ক্ষমা করুন।

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 তম দখলকৃত গোষ্ঠীকে বোঝায় এবং আরও ...

সুরক্ষা সতর্কতা: আপনি 'আউটসোমকে সম্পূর্ণরূপে বিবেচনা না করে' বাশ 'দেওয়ার জন্য আর কিছুই পাইবেন না ...

আশা করি যা কিছু বাধা মেটাতে সহায়তা করবে :)


1

ইনস্টল করুন mmv, তারপরে এটি করুন:

mmv "*.sql" "#1.php"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.