কেন ইউনিক্স এমভি প্রোগ্রামের ডিরেক্টরিগুলির জন্য -আর (রিকার্সিভ) বিকল্পের প্রয়োজন নেই তবে সিপির দরকার নেই?


58

যখন প্রয়োজন হয় তখন আমি সর্বদা বিভ্রান্ত হই cpবা mv: " -Rদিরের সাথে কাজ করার সময় আমার কি বিকল্পের প্রয়োজন ?" জিএনইউতে কোরিউটিলগুলির cpপ্রয়োজন আছে -Rএবং mvনেই।

ডায়ারগুলি অনুলিপি করার জন্য বিকল্পের cpপ্রয়োজনের কোনও কারণ আমি সন্ধান করতে পারি না -Rএবং mvতা করে না। আমি মনে করি যে cpআইরিং ব্যতীত -R(তবে পুনরায় পুনরায় আচরণের মতো -Rএবং এর মতো আচরণ করা mv) সরঞ্জামটি ব্যবহার করে কারও অভ্যাস ভঙ্গ করা ছাড়া আর কোনও সমস্যা হবে না।

আপনি কোন ব্যাখ্যা জানেন? অনেক দিন আগেও এর কোনও কারণ থাকতে পারে?


অতিরিক্ত প্রশ্ন: কেন কোর্টিলস বিকাশকারীরা cpডিফল্টরূপে পুনরাবৃত্তভাবে কপির ডায়ার তৈরি করে না ?

উত্তর:


45

একটি ডিরেক্টরি হ'ল (ধারণাগতভাবে) একটি বিশেষ "ফাইল" যাতে নামের তালিকা থাকে এবং সেই নামগুলি ইওনড নম্বর দেয়। কিছু নাম সাব-ডিরেক্টরি হতে পারে। একটি বিশেষ এন্ট্রি রয়েছে ..যা পিতামাতার ডিরেক্টরিতে নির্দেশ করে।

সুতরাং, এটি পরিষ্কার, একটি ফাইলের নাম পরিবর্তন করা সহজ: আপনি কেবল ডিরেক্টরি এন্ট্রিতে নাম পরিবর্তন করেন, অন্য কিছু নয়। এটি ধারণ করে যে ফাইলটি আসলে কোনও ফাইল, বা অন্য ডিরেক্টরিতে থাকা সামগ্রী সংরক্ষণের জন্য ব্যবহৃত একটি "ফাইল"। প্রকৃতপক্ষে, একই renameসিস্টেমে উভয়ই করে।

অনুলিপি করা, যদিও খুব কম তুচ্ছ কাজ হয়। আপনি পারে শুধু ডিরেক্টরি "ফাইল" কপি, কিন্তু তারপর আপনি দুটি ডিরেক্টরি যেখানে ফাইল একই (সেগুলি hardlinks হতে চাই) আছে চাই। আপনার যদি এমন একটি সিস্টেম থাকে যা হার্ডলিঙ্কগুলিকে ডিরেক্টরিগুলিতে মঞ্জুরি দেয় তবে সেগুলি হ'ল, তবে যেহেতু কোনও আধুনিক সিস্টেম এটি কমপক্ষে নন-রুটকে অনুমতি দেয় না, আপনাকে প্রতিটি উপ-ডিরেক্টরিতে এই অনুলিপিটি করতে হবে। আপনি অবশ্যই cpএই আচরণটি এর সাথে জিজ্ঞাসা করতে পারেন cp -lR: -lকঠোর লিঙ্কের -Rজন্য, সেই পুনরাবৃত্তির জন্য।

তবে সমস্ত কিছু যুক্ত করা সম্ভবত আপনি যা চান তা নয়। পরিবর্তে, আপনি cpপ্রতিটি ফাইল অনুলিপি করতে চান । এটি একটি মোটামুটি ব্যয়বহুল অপারেশন: প্রতিটি ফাইল অবশ্যই মেমরিতে পড়তে হবে এবং দ্বিতীয় স্থানে ডিস্কে আবার লিখে রাখতে হবে। ফাইলগুলি খোলার জন্য, পড়তে, লিখতে এবং বন্ধ করতে আসলে এটি বেশ কয়েকটি সিস্টেমে লাগে এবং প্রতিটি ফাইলের জন্য এটি পুনরাবৃত্তি করতে হয়।

প্রচলিত ফাইল সিস্টেমগুলিও ডিস্কে এইভাবে কাজ করে। একেক গুলো ফাইলের অনুলিপি করার জন্য আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা করে লেখার জন্য যেতে হবে না।


হয় mvএক ফাইল সিস্টেম থেকে অন্য "ডিরেক্টরির এন্ট্রিতে নাম শুধু পরিবর্তন" একই ing?
rslnx

5
না, ক্রস-ফাইল সিস্টেমটি একটি অনুলিপি + মুছার মতো (প্রকৃতপক্ষে, renameসিস্কল ক্রস-ফাইল সিস্টেমের জন্য ব্যর্থ হবে)। Not mvতিহাসিকভাবে , এমনকি ক্রস-এফএস সমর্থিত কিনা তা নিশ্চিত নয় ।
ডার্বোবার্ট

9
আমি আপনাকে বলতে পারি, প্রত্যক্ষ অভিজ্ঞতা থেকে জল্পনা নয়, শাস্ত্রীয় mvক্রস-ডিভাইস পদক্ষেপগুলিকে সমর্থন করে না। rename()এটি ব্যর্থ হলে কেবল একটি চেষ্টা করে এবং একটি ত্রুটি বার্তা মুদ্রণ করতে ব্যবহৃত হত । আমি এখনও দুর্ঘটনাবশত নতুন বৈশিষ্ট্যটি ব্যবহার করার সময় আমার হতবাক অনুভূতির কথা মনে আছে। কেন এই এমভি এত দিন নিচ্ছে? ওহ, এটি একটি পুনরাবৃত্তির অনুলিপি করছে যা আমার উদ্দেশ্য নয়!
অ্যালান কারি

5
শেল স্ক্রিপ্ট ব্যবহারের কারণে @ রাস্লানখুসনুলিন কমান্ড-লাইনের সাধারণ কমান্ডের বিকল্পগুলি পরিবর্তন করা খুব শক্ত। কেউ সিপির বর্তমান প্রত্যাখাত-অনুলিপি-অনুলিপি আচরণের উপর নির্ভর করে। ক্রস-এফএস স্টাফ সম্ভবত ভাঙ্গন সৃষ্টি করার সম্ভাবনা কম বিবেচিত হয়েছিল, যদিও আপনি দেখতে পাচ্ছেন, এটি এখনও অ্যালানকে অবাক করে দিয়েছে।
ডার্বোবার্ট

1
@ এরোবার্ট, এটি করেনি (ক্রস-ফাইল সিস্টেমটি mvকেবলমাত্র ভ্যাক্সের বিএসডি ৪.২-তে পৃথক ফাইলের জন্য কাজ করেছিল)।
ভোনব্র্যান্ড

21

আমাকে আর একটি প্রশ্ন জিজ্ঞাসা করে শুরু করুন:

মধ্যে পার্থক্য কি cpএবং cp -R?

ঠিক আছে, -Rপতাকা ছাড়াই কেবল ফাইলগুলি অনুলিপি করা সম্ভব, কারণ এটি অস্বাভাবিক যে কেউ কেউ পুনরুক্তি করে একটি ডিরেক্টরি অনুলিপি করতে চান: একটি নন-রিকার্সিভ অনুলিপি কেবল একই ডিরেক্টরিতে নির্দেশ করে ডিরেক্টরিটির দ্বিতীয় নাম হিসাবে চিহ্নিত করবে কাঠামো। কারণ এটি খুব কমই লোকেরা যা চায়, এবং সেখানে একটি পৃথক প্রোগ্রাম রয়েছে যা এটি করে ( ln), ডিরেক্টরিগুলির একটি পুনরাবৃত্তির অনুলিপি অনুমোদিত নয়।

তাহলে মধ্যে পার্থক্য হতে পারে mvএবং mv -R?

mv a bকেবল ডিরেক্টরিতে একটি একক প্রবেশের নাম পরিবর্তন করে, সুতরাং যদি কোনও ডিরেক্টরি সম্পাদনা করা হয় mv, তবে এর বিষয়বস্তুগুলি স্বয়ংক্রিয়ভাবে সরানো হবে। এই অর্থে, mvইতিমধ্যে পুনরাবৃত্ত সম্পত্তি প্রদান করে, অর্থাত্ পুনর্নবীকরণ ডিরেক্টরিতে সমস্ত প্রবেশের "নাম পরিবর্তন", যেমন থেকে শুরু a/1করে b/1। একজন mvযে কি এই নয় যে, অর্থাত্ যা ডিরেক্টরি renames aকরতে b, কিন্তু রাখে a/1যেমন a/1, মানুষ কি বুঝতে যখন তারা কিছু চলন্ত পড়ুন নয়: যখন আপনি একটি আলমারি সরানো, আলমারি বিষয়বস্তু পাশাপাশি স্থানান্তরিত হয়। অন্য অপারেশন, কোনও বিষয়বস্তু ছাড়াই ডিরেক্টরি সরানো, এটি ইতিমধ্যে উপলব্ধ, একে বলা হয় mkdir


2
একেবারে ঠিক, আমি শুধু চিন্তা ছিল cpএবং mvঅপারেশন যে তারা নামকরণ করা হয় যেমন: 'একটি অনুলিপি তৈরি' এবং 'পদক্ষেপ'। সুতরাং আমি যদি এক কাপ কফির একটি অনুলিপি তৈরি করতে চাই, আমি একই ভরাট (কফি পানীয়) সহ আরও এক কাপ কফির আশা করব। সমস্যাটি হ'ল এই সরঞ্জামগুলি 'সাধারণ মানুষ' নয় বরং এমন নার্দের জন্য যারা ডিস্ক এবং ফাইল সিস্টেমের কাঠামো সম্পর্কে সচেতন, তাদের ফাইল এবং ডায়ারের মতো ভার্চুয়াল সত্তা নয়।
RSSlnx

1
সুগঠিত, যুক্তিযুক্ত প্রতিক্রিয়া।
স্পেড

1
@ রুসলানখুসনুলিন আপনার কফি উপমাটিও কাজ করে cpএবং mvএটির জন্য "নার্ভনেস" কোনও স্তরের প্রয়োজন হয় না, কেবলমাত্র সাধারণ জ্ঞানকে বোঝার জন্য। এক কাপ কফির সত্যিকারের অনুলিপি খালি কাপ নয় - আপনাকে কেবল কাপটিই নয়, এর সমস্ত সামগ্রী (কফি )ও অনুলিপি করতে হবে। যাইহোক, আপনি যখন এক কাপ কফি সরিয়ে ফেলেন তখন আপনাকে সামগ্রীগুলি আলাদাভাবে স্থানান্তর করতে হবে না - সামগ্রীগুলি স্বাভাবিকভাবে কন্টেইনারটির সাথে সরানো হয়।
jw013

1
@ jw013 আপনি "আমাকে যখন এক কাপ কফি নিয়ে যান তখন বিষয়বস্তুগুলি আলাদাভাবে সরানো হয় না" আপনি আমাকে মুগ্ধ করেছেন, এটি সত্যিকার অর্থেই উপলব্ধি করা হয়েছে, আপনাকে ধন্যবাদ। তবে এটি বিমূর্ততার আরেকটি স্তর। আমি মনে করি আপনি মেটা-তথ্য ছাড়াই বাইট সিকোয়েন্সের মতো ফাইলগুলির কথা ভাবার সময় আপনার অর্থ "কোনও ফাইলকে একটি ইনোড হিসাবে বিবেচনা করুন" বলে মনে করি।
rslnx

6

সাধারণত আমি যখন ইউনিক্স যুক্তি দিয়ে জড়িয়ে যাই তখন আমি প্ল্যান 9 এর দিকে নজর রাখি যে ইউনিক্স উদ্ভাবকরা কীভাবে পিছনে সামঞ্জস্যতা না রেখেই বছরগুলিতে একই কাজগুলি বাস্তবায়িত করেছিলেন।

সুতরাং প্ল্যান 9 কেবলমাত্র ফাইলগুলি চালনার জন্য অফার cpএবং mvসরঞ্জামগুলি।

`cp f1 f2` creates f2 and copies f1's contents into it.
`mv f1 f2` renames f1 to f2 if f1 and f2 are in the same dir
           does `cp f1 f2 && rm f1` else
           can rename dirs (`mv d1 d2`) but will not move dir to another dir.

একটি দির অনুলিপি করার জন্য dircpএটি সত্যিই আছে @{cd fromdir && tar c .} | @{cd todir && tar xT}(আরসি শেল সিনট্যাক্স)

একটি দির সরাতে আমি মনে করি কেবল আছে dircp d1 d2 && rm -r d1

আমি মনে করি সীমিত করার cpএবং mvকেবল ফাইল অপারেশনের (ডিসার নয়) এই সিদ্ধান্ত ডিস্ক ক্রিয়াকলাপে আরও স্পষ্টতা এনেছে এবং tarফাইল গাছ অনুলিপি করার জন্য বোঝা এবং স্ক্রিপ্টিংয়ের জন্য ব্যবহার করা খুব আরামদায়ক।

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