'নাম পরিবর্তন' এবং 'এমভি' এর মধ্যে পার্থক্য কী?


12

এটি আমার কাছে সম্পূর্ণ পরিষ্কার নয়, তবে mvএবং rename( util-linux-ng 2.17.2হিসাবে /usr/bin/rename) এর মধ্যে পার্থক্য কী ? renameনিয়মিত অভিব্যক্তি গ্রহণ করা ছাড়াও কি একে অপরের সুবিধা রয়েছে mv? আমি বিশ্বাস করি renameএকসাথে একাধিক ফাইলের নামও পরিচালনা করতে পারে, যদিও এটি mvকরে না।

তাদের manপৃষ্ঠাগুলিতে আমি কী পরিষ্কার করেছিলাম তা আর খুঁজে পেলাম না যা তাদের আলাদা করে দেয় বা নিজের তদন্তের মাধ্যমে।


2
আসুন আমরা নিশ্চিত হয়ে থাকি যে আমরা একই জিনিসগুলির বিষয়ে কথা বলছি; আউটপুট কি type -a renameএবং থেকে হয় rename --version?
জেফ শ্যাচলার

@ জেফশালার এটি আমার পক্ষে কৌতূহল বেশি, তবে আমার * নিক্স মেশিনগুলির একটিতে আমি পেয়েছি rename is /usr/bin/renameএবং rename (util-linux-ng 2.17.2)যথাক্রমে।
উর্দা

6
একটা হয় সেখানে আউট কয়েক বিভিন্ন renames , এবং এটি একটি উপনাম / ফাংশন / স্ক্রিপ্ট থাকতে পারে, তাই আমি ঠিক নিশ্চিত আমরা জানতাম এটা কি ছিল করতে চেয়েছিলেন। ধন্যবাদ! আপনার প্রশ্নে এই আউটপুটগুলি সম্পাদনা করতে নির্দ্বিধায় অনুভব করুন।
জেফ শ্যাচলার

@ জেফশালার কোনও উদ্বেগ নেই, আসলে এই লিঙ্কটি আমি সবেমাত্র পেয়েছি যে আমাকে দেখিয়েছে যে renameবিভিন্ন ডিস্ট্রোজে বিভিন্ন জিনিস বোঝাতে পারে।
উর্দা

5
দেখে মনে হচ্ছে আপনার প্রশ্নের উত্তর রয়েছে। "একটি জেট উড়তে পারে এবং কয়েক হাজার গুণ দ্রুত যেতে পারে এই সত্য ছাড়াও জেট এবং ট্রাইসাইকের মধ্যে পার্থক্য কী ?" :-) ⁠
জি-ম্যান

উত্তর:


21

এটি উভয় জন্য saysাকনাতে মূলত যা বলে।

mvএক বা একাধিক ফাইলকে একটি নির্দিষ্ট লক্ষ্যে নিয়ে যাওয়ার জন্য একটি স্ট্যান্ডার্ড ইউটিলিটি । কেবলমাত্র একটি ফাইল স্থানান্তরিত করতে পারলে এটি কোনও ফাইলের নাম পরিবর্তন করতে ব্যবহৃত হতে পারে। যদি বেশ কয়েকটি mvথাকে তবে কেবল লক্ষ্যটি ডিরেক্টরি হলে কাজ করে এবং ফাইলগুলিকে সেখানে স্থানান্তরিত করে।

সুতরাং mv foo barপারেন ফাইল সরানো হবে fooনির্দেশিকাতে bar(যদি থাকে তাহলে), অথবা নামান্তর fooকরতে bar(যদি barঅস্তিত্ব নেই বা ডিরেক্টরির নয়)। mv foo1 foo2 barকেবলমাত্র দুটি ফাইলই ডিরেক্টরিতে সরানো হবে barবা barডিরেক্টরি না হলে অভিযোগ করবে ।

mvrename()ফাইলগুলি সরানোর জন্য সি লাইব্রেরি ফাংশনটি কল করবে এবং যদি এটি কাজ না করে (তাদের অন্য একটি ফাইল সিস্টেমে স্থানান্তরিত করা হয়), এটি ফাইলগুলি অনুলিপি করে এবং মূলগুলি সরিয়ে ফেলবে।

যদি আপনার সমস্ত কিছু থাকে mvএবং আপনি একাধিক ফাইলের নাম পরিবর্তন করতে চান তবে আপনাকে শেল লুপ ব্যবহার করতে হবে। এখানে যে সাইটে উপর প্রশ্নগুলির একটি নম্বর আছে, যেমন দেখতে এই , এই , এবং অন্যদের


অন্যদিকে, বিভিন্ন renameইউটিলিটিগুলি পৃথকভাবে ফাইলগুলির নাম পরিবর্তন করে।

renameথেকে util-লিনাক্স যা আপনি উল্লেখ একটি সহজ স্ট্রিং প্রতিকল্পন করে তোলে, যেমন rename foo bar *পরিবর্তন হবে foobarথেকে barbar, এবং asdffooকরতে asdfbarএটা আছে না , তবে, একটি রেগুলার এক্সপ্রেশন নিতে!

পার্ল নাম পরিবর্তনের ইউটিলিটি ( বা এটির বিভিন্ন উদাহরণ ) ফাইলের নামগুলি রূপান্তর করতে পার্ল এক্সপ্রেশন নেয়। এক সম্ভবত একটি ব্যবহার করা হবে কমান্ড, যেখানে প্যাটার্ন হয় একটি রেগুলার এক্সপ্রেশন।s/pattern/replacement/

ইউজ-লিনাক্স নাম এবং পার্ল নাম দুটোই একই সাথে ফাইলের নামটিতে যথাযথ পরিবর্তন করে ফাইলকে অন্য ডিরেক্টরিতে স্থানান্তরিত করতে ব্যবহার করা যেতে পারে তবে এটি কিছুটা বিশ্রী। উভয়ই rename()ফাইলে কল করার চেয়ে বেশি কাজ করে না, সুতরাং একটি ফাইল সিস্টেম থেকে অন্য ফাইলের সরানো কাজ করে না।

আপনার কাছে যা renameআছে, এটি আপনার বিতরণ এবং / অথবা আপনি কী ইনস্টল করেছেন তার উপর নির্ভর করে । তাদের বেশিরভাগ সমর্থন করে rename --versionতাই আপনার কোনটি রয়েছে তা সনাক্ত করতে এটি ব্যবহার করুন।


শুধুমাত্র 'নিয়মিত অভিব্যক্তি' নয়, প্রয়োজন হলে কাজ করুন
গিলস কুইনট

@ গিলসকুইনট, ভাল, হ্যাঁ, আপনি rename '$_=lc' *ফাইলের নাম ছোট করার জন্য যেমন করতে পারেন । তবে আমি মনে করি যে সর্বাধিক সাধারণ s///কেসটি ব্যবহার করা (যা আমি উল্লেখ করেছি) এবং এর প্যাটার্ন অংশটি একটি রেজেক্স; আমি মনে করি না আপনি সেখানে কোনও ফাংশন ব্যবহার করতে পারেন। যদিও আপনি এটি প্রতিস্থাপনের অংশে করতে পারেন।
ইলক্কাচু

@ মাই ওয়ারাথ অ্যাকাদেমিয়া, ম্যান পেজের প্রথম উদাহরণটি আমার পক্ষে কাজ করে (এটি কেবল অন্যটির থেকে আলাদাভাবে কাজ করে)। এছাড়াও, আমি দেবিয়ানের ম্যানাপেজগুলির সাথে যুক্ত হওয়ার কারণটি হ'ল কমপক্ষে এটি খুব স্পষ্ট করে জানিয়েছে যে ম্যান পেজটি rename.ulইউজার-লিনাক্স সংস্করণের জন্য এবং এটি অন্য কারও জন্য নয়।
ilkkachu

@ ইলক্কাছু, আপনার উত্তর বা কোনও মন্তব্যে সেই প্রথম উদাহরণটির ব্যাখ্যা ব্যাখ্যা করতে আপনার কি আপত্তি আছে? এটি উদাহরণের থেকে পৃথক man renameতাই ডেবিয়ান উদাহরণটি সম্পর্কে আপনার বোঝা জেনে রাখা ভাল
MyWrathAcademia

@ MyWrathAcademia, আমি ধরে নিয়েছি আপনি rename foo foo0 foo?; rename foo foo0 foo??উদাহরণটি বোঝাচ্ছেন , যেহেতু আমি যে দুটি ম্যান পেজ দেখেছি তার মধ্যে এটিই ছিল একমাত্র পার্থক্য। এই জোড় কমান্ডগুলি কাজ করে কারণ প্রথমটি প্রতিটি একক-অঙ্কের ফাইলের নামের সাথে একটি শূন্য যুক্ত করে, এবং এর পরে দ্বিতীয়টি (অন্য) শূন্য প্রতিটি দুই-অঙ্কের ফাইলের নাম যোগ করে। দ্বিতীয় সেটে প্রথম কমান্ড দ্বারা নামকরণ করা ফাইলগুলি অন্তর্ভুক্ত রয়েছে। rename foo foo00 foo?প্রথম কমান্ডটিও কাজ করে যেমন এটি একবারে দুটি শূন্য যুক্ত করে।
ilkkachu

2

mvকেবলমাত্র ফাইলটির নাম পরিবর্তন করে (এটি এটি অন্য একটি ফাইল সিস্টেম বা পথেও স্থানান্তর করতে পারে)। আপনি এটিকে একটি পুরানো নাম এবং একটি নতুন নাম দিন এবং এটি ফাইলটিকে নতুন নাম বা লোকেশনে পরিবর্তন করে। renameবাল্ক নামকরণের পরিবর্তন করতে ব্যবহৃত হয়। বলুন আপনি একটি হাজার ফাইল ছিল, foo000.logমাধ্যমে foo999.logএবং আপনাকে তাদের পরিবর্তন চেয়েছিলেন bar000.logমধ্য দিয়ে bar999.log। সঙ্গে mvআপনাকে যা করতে হবে চাই mv foo000.log bar000.log, mv foo001 bar001.logইত্যাদি বা অন্য একটি স্ক্রিপ্ট লিখুন। আপনার সাথে renameকেবল rename foo bar foo*.log, এবং ভয়েলা সহ এক হাজার ফাইল তাত্ক্ষণিকভাবে পরিবর্তিত হয়! বেশ দারুন. পরীক্ষা করে দেখুন man renameবিস্তারিত জানার জন্য আবার পাতা।


2

এমভি

এটি একটি বেসিক কমান্ড লাইনটি একটি কাজ করার জন্য এবং এটি ভালভাবে করার জন্য ডিজাইন করা হয়েছে (ইউনিক্স দর্শন): মুভ ফাইল (গুলি) বা ডিরেক্টরী (গুলি)

গন্তব্যস্থলটির স্ট্রিংয়ে পরিবর্তন করতে আপনি STDOUT& hack হ্যাক করতে পারেন STDINতবে এটি কেবল একটি স্মার্ট হ্যাক নয়

নতুন নাম (পার্ল এর এক)

সাবধানবাণী একই নামের অন্যান্য সরঞ্জাম রয়েছে যা এটি করতে সক্ষম হতে পারে বা নাও পারে, তাই সাবধান হন।

লোকেরা যখন কথা বলে তখন renameআমরা এটাকে নিয়ে ELFকম চিন্তা করি না , কম শক্তিশালী (যাদু?)।

এটি বেসিক নয়, এটি পার্ল আপনি পার্লের কিছু কার্য ভিতরে প্রবেশ করতে পারবেন এবং এটি অত্যন্ত শক্তিশালী।

এই উদাহরণ বিবেচনা করুন:

আপনি এই জাতীয় কিছু ফাইলের নাম পরিবর্তন করতে চান

foobar_1.txt
foobar_2.txt
foobar_3.txt

আপনি sprintf()এই জাতীয় অঙ্কগুলিতে শূন্যগুলি এপেন্ড করতে পারেন (রেগেক্স, হেহ, এটি পার্ল: ডি ব্যবহার করে):

rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt

এখন তোমার আছে :

foobar_0001.txt
foobar_0002.txt
foobar_0003.txt

আসলেই কোন বেসিক কমান্ড নয়, তাই না?

নামটি ডির (গুলি) সরানোর জন্য ডিজাইন করা হয়নি তবে এটি এটি করতে পারে:

$ mkdir -p /tmp/foo/bar/base
$ touch /tmp/foo/bar/base/file
$ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file

সরানো ফাইল

/tmp/file

¹ কয়েকটি *.stackexchange.*ওয়েবসাইটে আমরা ওয়েবসাইটে দেখি

এখানে চিত্র বর্ণনা লিখুন

for FILE in `ls *.txt`
do
    mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
done

এটি যাওয়ার উপায় নয় , এটি সরল বগী, সঠিক মুহুর্তে সঠিক সরঞ্জামটি কেন ব্যবহার করতে হবে তা কেবল ব্যাখ্যা করার জন্য


sprintfনাম পরিবর্তন করে
আনার

-1

এমভি প্যাচসমূহ বা renames ফাইল ও ডিরেক্টরিগুলি এবং তাদের ব্যাক আপ নেবে; নতুন নামকরণ কেবল ফাইলের নাম পরিবর্তন করে।

এমভিতে আরও ক্ষমতা এবং বিকল্প রয়েছে। ক্ষমতার পার্থক্যগুলি দেখতে প্রতিটিটির জন্য ম্যান পৃষ্ঠাগুলিতে থাকা স্যুইচগুলি দেখুন। আসুন উবুন্টু 18.04LTS- তে ম্যান ব্যবহার করে একবার দেখে নেওয়া যাক (প্রতিটি প্যাকেজের সংস্করণের উপর নির্ভর করে আপনার মাইলেজটি পৃথক হতে পারে):

এমভি বিকল্পসমূহ (সহায়তা এবং সংস্করণ বাদ দেওয়া)

   --backup[=CONTROL]  
          make a backup of each existing destination file  

   -b     like --backup but does not accept an argument  

   -f, --force  
          do not prompt before overwriting  

   -i, --interactive  
          prompt before overwrite  

   -n, --no-clobber  
          do not overwrite an existing file  

  If you specify more than one of -i, -f, -n, only the final one takes effect.  

   --strip-trailing-slashes  
          remove any trailing slashes from each SOURCE argument  

   -S, --suffix=SUFFIX  
          override the usual backup suffix  

   -t, --target-directory=DIRECTORY  
          move all SOURCE arguments into DIRECTORY  

   -T, --no-target-directory  
          treat DEST as a normal file  

   -u, --update  
          move only when the SOURCE file is newer than the destination file or when the destination file is missing  

   -v, --verbose  
          explain what is being done  

   -Z, --context  
          set SELinux security context of destination file to default type  

বিকল্পগুলির নাম পরিবর্তন করুন (বাদ দেওয়া সহায়তা এবং সংস্করণ)

   -s, --symlink   
          Do not rename a symlink but its target.  

   -v, --verbose  
          Show which files where renamed, if any.  

   -n, --no-act  
          Do not make any changes.  

   -o, --no-overwrite  
          Do not overwrite existing files.            

3
'আরও শক্তিশালী' সংজ্ঞা দিন। এমভি কি পুনরায় নামকরণের মতো রেগেক্সকে সমর্থন করে?
গিলস কুইনট

প্রশ্নকর্তা যেমন বলেছেন, না।
K7AAY

2
বাহ, কী যুক্তি
গিলস কুইনট

1
Creditণ দেওয়ার যেখানে creditণ প্রদান
K7AAY
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.