সিপি যখন অদ্ভুত আচরণ করে। (বিন্দু) বা .. (বিন্দু বিন্দু) উত্স ডিরেক্টরি


15

এই উত্তরটি প্রকাশ করে যে কোনও ব্যক্তি লুকানো ফাইলগুলি সহ ডিরেক্টরি থেকে ডিরেক্টরিতে srcএমন সমস্ত ফাইল অনুলিপি করতে পারেন dest:

mkdir dest
cp -r src/. dest

কেন এটি আসলে কাজ করে সে সম্পর্কে উত্তরের বা তার মন্তব্যে কোনও ব্যাখ্যা নেই এবং কেউই এ সম্পর্কে ডকুমেন্টেশন খুঁজে পায় বলে মনে হয় না।

আমি কয়েকটি জিনিস চেষ্টা করেছিলাম। প্রথমত, সাধারণ ক্ষেত্রে:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file  src

তারপরে, /.শেষে:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file  .dotfile  src_dir  src_file

সুতরাং, এটি একই সাথে আচরণ করে *তবে লুকানো ফাইলগুলি অনুলিপি করে।

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest
$ ls -A dest
dest_file  src_dir  src_file

.এবং ..এখানে যথাযথ হার্ড-লিঙ্কগুলি যেমন ডিরেক্টরিতে প্রবেশের মতোই ব্যাখ্যা করা হয়েছে তেমন ।

এই আচরণটি কোথা থেকে এসেছে এবং এটি কোথায় নথিভুক্ত করা হয়েছে?


3
আপনি কী বলতে চাইছেন যে কেউ ডকুমেন্টেশন খুঁজে পাবে না? cpরেফারেন্স পরিষ্কারভাবে ব্যাখ্যা cp -Rকাজ করে। .এবং ..ডিরেক্টরিগুলি হ'ল অন্য ডিরেক্টরিগুলির মতো, সেগুলি সম্পর্কে যাদুকর বা রহস্যময় কিছুই নেই।
অ্যালেক্সপি

2
@ অ্যালেক্সপি আমি উত্তরটি এটিকে পরিষ্কার করার জন্য সম্পাদনা করেছি। পুরো বিষয়টি হ'ল .এবং ..অন্যান্য ডিরেক্টরিগুলির মতো আচরণ করবেন না।
iFreilicht

উত্তর:


27

আচরণটি ডকুমেন্টেড অ্যালগরিদমের একটি যৌক্তিক ফলাফল cp -R। দেখুন POSIX , ধাপ 2f:

ডিরেক্টরি উত্স ফাইলের ডিরেক্টরি ফাইল_ ডিরেক্টরি ফাইলটিতে অনুলিপি করা হবে , উত্স -ফাইল হিসাবে ফাইলের সাথে এখানে তালিকাভুক্ত চারটি পদক্ষেপ (1 থেকে 4) গ্রহণ করা হবে

.এবং ..ডিরেক্টরিগুলি হ'ল যথাক্রমে বর্তমান ডিরেক্টরি এবং মূল ডিরেক্টরি। শেলটি সম্পর্কিত যতটা না বিশেষ, তেমনি উভয়ই প্রসারিত দ্বারা উদ্বিগ্ন নয় এবং লুকানো ফাইলগুলি সহ ডিরেক্টরিটি অনুলিপি করা হবে না। *অন্যদিকে, ফাইলগুলির তালিকায় প্রসারিত হবে এবং এখানে লুকানো ফাইলগুলি ফিল্টার আউট করা হবে।

src/.ভিতরে বর্তমান ডিরেক্টরিটি srcযা srcনিজেই; src/src_dir/..হয় src_dirএর পেরেন্ট ডাইরেক্টরি, যা আবার src। সুতরাং বাইরে থেকে srcযদি srcকোনও ডিরেক্টরি থাকে তবে নির্দিষ্ট করা src/.বা src/src_dir/..উত্স হিসাবে উত্স ফাইল হিসাবে cp, এবং srcলুকানো ফাইলগুলি সহ সামগ্রীর অনুলিপি অনুলিপি করুন ।

উল্লেখ বিন্দু src/.যদি এটি ব্যর্থ হবে srcএকটি ডিরেক্টরি (বা একটি ডিরেক্টরিতে সিম্বলিক লিঙ্ক) নয়, যেহেতু srcকরত না। এটি নিজেই srcঅনুলিপি না srcকরে কেবলমাত্র বিষয়বস্তু অনুলিপি করবে; এটি ডকুমেন্টেশনের সাথেও মেলে:

যদি টার্গেটটি বিদ্যমান থাকে এবং একটি বিদ্যমান ডিরেক্টরিকে নাম দেয় তবে ফাইলের স্তরক্রমের প্রতিটি ফাইলের জন্য সংশ্লিষ্ট গন্তব্য পথের নাম লক্ষ্যবস্তু হতে হবে , যদি একটি স্ল্যাশের মধ্যে টার্গেট শেষ না হয় তবে একক স্ল্যাশ অক্ষর এবং ফাইলের আপেক্ষিকের পথের নাম উত্স_ফায়ালযুক্ত ডিরেক্টরিতে ।

তাই cp -R src/. destকপি বিষয়বস্তু srcথেকে dest/.(উৎস ফাইল .মধ্যে src), যেহেতু cp -R src destকপি বিষয়বস্তু srcথেকে dest/src(উৎস ফাইল src)।

এই অন্য উপায় ভাবতে অনুলিপি তুলনা হয় src/src_dirএবং src/.বদলে তুলনা src/.এবং src। আগের ক্ষেত্রে .যেমন আচরণ করে src_dir


তবে এটি একইভাবে আচরণ করে না। নির্দিষ্ট করা srcমধ্যে ডিরেক্টরি কপি হবে dest, src/.বিষয়বস্তু কপি হবে। আমি প্রশ্নে আরও পরিষ্কার করার চেষ্টা করব।
iFreilicht

সেখানে, আমি মনে করি এটি আপনার অন্তর্নিহিত প্রশ্নের উত্তর দেয়।
স্টিফেন কিট

1
@ স্টাফেন ওপি অনুলিপি src/.এবং src/*(নোট, নয় src/.* ) তুলনা করে ; src/*গ্লোববিং এগুলি উপেক্ষা করলে লুকানো ফাইলগুলি অন্তর্ভুক্ত করা হয় না ...
স্টিফেন কিট

1
হুঁ , " সোর্স_ফায়াল যুক্ত ডিরেক্টরি "। ঠিক আছে, স্পষ্টতই srcরয়েছে src/.তবে এর অর্থ এই নয় যে ডিরেক্টরিতে থাকা ডিরেক্টরিটি আপনার ডিরেক্টরিটির নাম কী করে তার উপর নির্ভর করে। অবশ্যই .লিঙ্কগুলির একটি উপায়ে অস্তিত্বের অর্থ হ'ল সমস্ত ডিরেক্টরি নিজেরাই ধারণ করে তবে এটি সবার পক্ষে স্বজ্ঞাত হতে পারে না। এই আচরণের পরিবর্তে, একজনকে ধরে নিতেও প্ররোচিত করা যেতে পারে যে "ডিরেক্টরি সম্বলিত ডিরেক্টরি foo" দ্বারা নির্ধারিত হবে foo/.., এক্ষেত্রে যদি আমরা উল্লেখ করি fooবা তাতে কিছু আসে যায় না foo/.: ফলস্বরূপ ডিরেক্টরিটি একই থাকবে।
ilkkachu

1
কোনটি বলতে চাই যে মধ্যে পার্থক্য হল fooএবং foo/.একটি বিট উপাদেয় মনে হয়, কিন্তু আমি কিছু মনে না করেন, আমি এটা সামান্য মজাদার বটে।
ilkkachu

1

আপনি যখন দৌড়াবেন cp -R src/foo dest, আপনি পাবেন dest/foo। তাই আপনি যদি ডিরেক্টরির dest/fooবিদ্যমান নয়, cpএটা তৈরি করবে, এবং তারপর বিষয়বস্তু কপি src/fooকরার dest/foo

যখন আপনি চালাতে cp -R src/. dest, cpদেখে dest/.বিদ্যমান, এবং তারপর এটি বিষয়বস্তু কপি মাত্র ব্যাপার src/.থেকে dest/.

আপনি যখন নামে একজন ডিরেক্টরির অনুলিপি হিসাবে মনে .থেকে srcএবং বিদ্যমান ডিরেক্টরির কাজ এটির সামগ্রীগুলি মার্জ dest/., এটা জানার জন্য হবে।

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