সিম্যলিংক অনুলিপি করুন এবং যেখানে এটি rsync ব্যবহারের দিকে নির্দেশ করে


11

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

rsync -a(বা -l) সিমলিংক সংরক্ষণ করতে পারে, এবং -Lসিমলিংকগুলি অবলম্বন করতে পারে এবং এটিকে অনুলিপি করতে পারে যেমন এটি সাধারণ ফাইল / ডির। তবে, সিমলিংকটি রাখা, এবং লিঙ্কগুলি নির্দেশিত ফাইল / ডিরেক্টরিগুলি অনুলিপি করা কি সম্ভব?

এখানে একটি উদাহরণ। বলুন যে আমাদের এই ফোল্ডারটিক্রমক্রম রয়েছে:

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others

এবং যখন আমি rsync -aR dirA dest(বা অন্য কিছু) করি, আমি ঠিক এগুলি উপস্থিত হতে চাই dest:

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2

এটি দিয়ে কি সম্ভব rsync? ধন্যবাদ.

আসুন ধরে নিই যে সিমলিঙ্কগুলি পরম পাথ রয়েছে বা উত্স ডিরেক্টরিটির বাইরের দিকে ইশারা করা এড়ানো যায়।


1
আমি মনে করি আপনার অনুরোধ underspecified হল: আপনি প্রয়োজন যে যদি dirA/linkএকটি সিমবলিক লিঙ্ক হয় ../dirB/file, তাহলে এই কপি হিসাবে নিয়ে নাড়াচাড়া করতে হবে dirB/fileকরতে dest/dirB/fileএবং dirA/linkকরতে dest/dirA/link। যদি dirA/linkএকটি লিঙ্ক হয় ../../another_file? dirA/linkডিরেক্টরি ট্রিতে উচ্চতর যে ডিরেক্টরিকে নির্দেশ করে , সাধারণভাবে কী ঘটে ?
রিকার্ডো মুরি

ভালো বল ধরা. আমার ব্যবহারের ক্ষেত্রে, গাছের বাইরে কোনও লিঙ্ক পয়েন্ট নেই এবং লিঙ্কগুলির মধ্যে কোনও নিখুঁত পথ নেই।
ওয়েই-ইয়িন

1
আমি এটি সম্পর্কে যত বেশি চিন্তা করি, তত বেশি আমি মনে করি কোনও মানক ইউটিলিটি এটি করবে না। সাধারণ ক্ষেত্রে, এটা, একটি একক উৎস দেওয়া গন্তব্যস্থলগুলির মধ্যে সংখ্যক তৈরি করতে আপনি একটি সিমবলিক লিঙ্ক করার জন্য একটি সিমবলিক লিঙ্ক বা একাধিক সাধারণত একটি সিমবলিক লিঙ্ক যার লক্ষ্য একটি সিমবলিক লিঙ্ক (ধারণ করে আছে প্রয়োজন হতে পারে যেমন a -> b, b -> c/foo, c -> d/e: কপি করার জন্য একটি অনুরোধ aএছাড়াও কপি উচিত b, c, c/foo, d, d/eএবং d/e/foo)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস: হ্যাঁ, আপনি ঠিক বলেছেন। লিংকগুলি ট্র্যাক করার ফলে অনেকগুলি ফাইল অন্তর্ভুক্ত হতে পারে, যতক্ষণ না তারা উত্স ডিরেক্টরিতে রয়েছে।
ওয়েই-ইয়িন

উত্তর:


2

আপনি যদি সিমলিংকের নামটি জানেন এবং লিঙ্কটি এবং লক্ষ্যটি স্থানান্তর করতে চান তবে:

rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .

প্রথম rsyncস্থানান্তর মাত্র symlink। দ্বিতীয় কমান্ডটি প্রকৃত ডিরেক্টরির নামটি আবিষ্কার করে এবং দ্বিতীয়টি rsyncডিরেক্টরি সামগ্রী স্থানান্তর করে।


0

এটি সম্ভব হবে যদি এবং কেবলমাত্র আপনি যদি এই সমস্তগুলি 'মাইডির'-এ থাকতেন এবং আপনি' মাইডির'কে এক জায়গা থেকে অন্য জায়গায় নিয়ে যান তবে। রাইকিঙ্ক আপনার দেওয়া পথের বাইরে অনুলিপি করতে সক্ষম নয় (নিম্নলিখিত লিঙ্কগুলি বাদ দিয়ে)। যেমন

mydir/dirA ...
mydir/dirB ...
...

হ্যাঁ, এই ধারণাটি আমার ব্যবহারের ক্ষেত্রে উপযুক্ত। সমস্ত লিঙ্কগুলি মাইডিরের ভিতরে।
ওয়েই-ইয়িন

@ ওয়েই-ইয়িন তখন কেবল এটিকে বলুন যে
প্রতীকগুলি

@ এক্সেনোটেরাকাইড: আপনি আরএসসিএনকে যেভাবে আহ্বান করবেন তা বিবেচনা না করেই আমি মনে করি এটি প্রতিটি উত্সের জন্য একক গন্তব্য তৈরি করবে (শীর্ষস্থানীয় ডিরেক্টরিগুলি তৈরি করা ব্যতীত)। তবে ওয়েই-ইয়িন দুটি বা ততোধিক গন্তব্য তৈরি করতে চায়: লিঙ্কটি এবং তার লক্ষ্য।
গিলস 'অশুভ হওয়া বন্ধ করুন'

স্পষ্টতই আমি বিভ্রান্ত ...
xenoterracide

@ গিলস: আরএসসিঙ্কের সিমলিংক অনুসরণ করার দরকার নেই কারণ এটি যেভাবেই লক্ষ্যটিকে সিঙ্ক করবে । সুতরাং এটি প্রথমে সিমিলিংক অনুলিপি করে একটি ঝোলা সিমলিংক তৈরি করে। তারপরে এটি ডিরেক্টরিতে সিমলিংকের লক্ষ্য সহ অন্য সমস্ত কিছু অনুলিপি করে চলেছে। ভয়েলা, সবকিছু সুন্দরভাবে একসাথে ফিট করে।
মার্টিন বনাম লুইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.