প্রতীকী লিঙ্কগুলি কীভাবে অনুলিপি করবেন?


180

আমার ডিরেক্টরিতে কিছু প্রতীকী লিঙ্ক রয়েছে:

user@host:include$ find .. -type l -ls
4737414    0 lrwxrwxrwx   1 user group       13 Dec  9 13:47 ../k0607-lsi6/camac -> ../../include
4737415    0 lrwxrwxrwx   1 user group       14 Dec  9 13:49 ../k0607-lsi6/linux -> ../../../linux
4737417    0 lrwxrwxrwx   1 user group       12 Dec  9 13:57 ../k0607-lsi6/dfc -> ../../../dfc
4737419    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon
4737420    0 lrwxrwxrwx   1 user group       19 Dec  9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx
4737421    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat

আমার সেগুলি বর্তমান ডিরেক্টরিতে অনুলিপি করা দরকার। ফলস্বরূপ লিঙ্কগুলি তাদের প্রোটোটাইপগুলি থেকে স্বতন্ত্র হওয়া উচিত এবং তাদের লক্ষ্যবস্তুতে সরাসরি যেতে হবে।

  • cp -s লিঙ্কগুলির লিঙ্ক তৈরি করে যা উপযুক্ত আচরণ নয়।
  • cp -s -L ডিরেক্টরিতে লিঙ্ক অনুলিপি করতে অস্বীকার
  • cp -s -L -r কর্মহীন ডিরেক্টরিতে সম্পর্কিত লিঙ্কগুলি অনুলিপি করতে অস্বীকার করে

আমার কি করা উচিৎ?


10
cp -dআমার পক্ষ থেকে কাজ করে।
এম ধনী

2
cp -Rএকটি ম্যাকে
মিরকো '

উত্তর:


201
cp --preserve=links

ম্যান পৃষ্ঠা থেকে:

   --preserve[=ATTR_LIST]
          preserve  the   specified   attributes   (default:   mode,owner-
          ship,timestamps),  if  possible  additional attributes: context,
          links, xattr, all

ব্যক্তিগতভাবে, আমি cp -av আমার বেশিরভাগ ভারী অনুলিপি ব্যবহার করি । এইভাবে, আমি সমস্ত কিছু সংরক্ষণ করতে পারি - এমনকি পুনরাবৃত্তভাবে - এবং আউটপুটও দেখতে পারি। অবশ্যই, এটি কেবল ব্যক্তিগত পছন্দ।

কেন আপনার অন্য অপশন আপনি যা প্রত্যাশা করেন নি হিসেবে -sএকটি লিঙ্ক তোলে পরিবর্তে অনুলিপি এবং -Lসংযোগগুলি নিজেদের অনুলিপি পরিবর্তে অনুলিপি করতে ফাইল খুঁজতে উৎস লিঙ্কগুলি অনুসরণ করে।


3
আপনার যোগ করার দরকার হতে পারে -R, কারণ অন্যথায় সিপি ডিরেক্টরিতে ডিরেক্টরিগুলি এবং প্রতিলিঙ্কগুলি এড়িয়ে যায়।
অলিভিয়ার 'balbaum' Scherler

8
আমি
রেডহাতে

41
একটি ম্যাক উপর? ব্যবহারcp -a
স্টিভ তোবার

11
-aবিকল্পের জন্য +1 । হেই, আমি cpঅসংখ্য বারের ম্যানপেজে অপশনগুলি সন্ধান করেছি , তবুও আমি অবশ্যই সর্বদা এইটির উপরে ঝাঁপিয়ে পড়েছি। আমি এখনও অবধি ব্যবহার করছি -dpr, তবে -aএগুলি সবই জুড়েছি, সাথে সাথে আরও কয়েকটি গুণাবলীর সংরক্ষণ। আমি যদি এই অন্যান্য বৈশিষ্ট্যগুলির প্রয়োজন হত তবে আমি সম্ভবত --preserveবিকল্পটি আবার অনুসন্ধান এবং ব্যবহার করতে পারতাম -dr --preserve=all, যা ঠিক -aতাই! ভাল অন্তত আমি এখন জানি - -aনিখুঁত এবং এটি এখন থেকে আমি ব্যবহার করব।
জেমস হাই হাই

3
এটি সাইগউইনের উপর কাজ করেনি। --preserve=linksযথেষ্ট ছিল না। এটি এখনও বলা হয়েছে cp: omitting directory। তবে -avকাজ করেছেন।
ক্লো

44

ম্যান পেজ যেমন বলেছে তেমনি ব্যবহার করুন -P


8
ম্যাক -Pঅন ​​ডিরেক্টরিতে কাজ করে না তাই আমি ব্যবহার করেছিcp -a
স্টিভ টবার

4
ধন্যবাদ, আমি আপনার উত্তরটি এক বছরে বিভিন্ন সময়ে 3 বার দেখেছি এবং উপকৃত হয়েছি। মনে হচ্ছে না মনে হচ্ছে!
সিদ্ধার্থ

এটি কাজ করে, তবে আমার ম্যান পেজটি বলেছে "-P কখনই SOURCE- তে প্রতীকী লিঙ্কগুলি অনুসরণ করে না", যা স্বজ্ঞাতভাবে "গন্তব্যের প্রতিলিপিগুলির মতো অনুলিপি প্রতিলিপি" এর মতো নয়। ("কখনই অনুসরণ করুন" এটিকে শব্দের মতো করে তোলে যেমন এটি আর-এর সাথে মিশে কাজ করে)
আরএম

এটি cp -Pআমার পক্ষে @ কাইনোসনাসের শীর্ষ ভোটের উত্তরের মত নয়। ধন্যবাদ!
tommy.carstensen

রেডহাটে কাজ করে। গৃহীত প্রতিক্রিয়া কাজ করে না!
ফিলবার

29

লিঙ্কগুলিতে যদি আপেক্ষিক পাথ থাকে তবে লিঙ্কটি অনুলিপি করা আপেক্ষিক পাথ সামঞ্জস্য করবে না। লিঙ্কটির নিখুঁত পথ পেতে, পুনরাবৃত্তভাবে অনুসরণ readlinkকরতে স্যুইচটি ব্যবহার -fকরুন। উদাহরণ স্বরূপ:

ln -s $(readlink -f old/dir/oldlink) new/dir/newlink

যদি আপেক্ষিক পথগুলি সংরক্ষণ করা হয় তবে আপনি যা চান তার চেয়ে বিকল্প -Pহিসাবে cp, যেমন ইগনাসিও ভাস্কেজ-আব্রামস বলেছেন, আপনার প্রয়োজনটি।


1
পুনরাবৃত্তভাবে ডিরিফারেন্স করা খারাপ ধারণা হতে পারে যদি আপনি যা করতে চেষ্টা করছেন তা হ'ল সিমলিংকে পরম সম্পর্কিত হতে রূপান্তর করতে to এখানে পুনরাবৃত্তি প্রয়োজন হয় না, এবং কখনও কখনও শৃঙ্খলিত চিহ্নগুলি সেখানে কোনও কারণে থাকে। সিমলিংকগুলি প্রায়শই পছন্দ বা কনফিগারেশন বিকল্পগুলি নির্দিষ্ট করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আমার সিস্টেমে একটি সিমলিংক চেইন রয়েছে /usr/share/dict/words -> /etc/dictionaries-common/words -> /usr/share/dict/british-englishযা পছন্দসই অভিধানটি নির্দিষ্ট করে। আপনি যদি এই চেইনটিকে পুনরাবৃত্তভাবে অবলম্বন করতে চান, ফলস্বরূপ সিমলিংকটি এই পছন্দগুলিতে ভবিষ্যতের যে কোনও পরিবর্তন উপেক্ষা করবে।
জেমস হাই হাই

24

যেমন কিছু মন্তব্য করেছেন:

cp -a 

ভাল কাজ করে.

লোকটির কাছ থেকে:

-a    same as -dR --preserve=all

-R    copy directories recursively
-d    same as --no-dereference --preserve=links
--no-dereference   never follow symbolic links in SOURCE

3
... তবে কেবলমাত্র যদি প্রতীকগুলির কোনওটি আপেক্ষিক পাথের সাথে না থাকে।
মাইকেল শ্যাপার 21

11

সত্যিকারের বৃহত ডিরেক্টরিটিকে নকল করতে আমি নিম্নলিখিতটি ব্যবহার করেছি। সমস্ত প্রতীকী লিঙ্কগুলি সংরক্ষণ করা হয়েছিল, অনুলিপিটি অনুলিপি করা হয়েছিল এবং আমি প্রক্রিয়াটির কিছু ভিজ্যুয়াল প্রতিক্রিয়া পেতে সক্ষম হয়েছি:

cp -Prv /sourcer_dir/* /target_dir

10

বেশিরভাগ সময়, যখন আমাকে অনেক প্রতীকী লিঙ্কগুলি অনুলিপি করার দরকার হয়, আমি আসলে একটি ডিরেক্টরি গাছকে আয়না দেওয়ার চেষ্টা করি। তাই আমি সিমলিংকগুলি এবং সমস্ত কিছু চাই।

এটি কয়েকটি কয়েকটি সিমলিংক অনুলিপি করার জন্য অতিমাত্রার কাজ, তবে যদি আপনি আসলে একটি সম্পূর্ণ গাছ অনুলিপি করার চেষ্টা করছেন তবে এটি খুব কার্যকর হতে পারে:

ট্যার ব্যবহার করুন ।

user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )

আলকাতরা ডিফল্টরূপে সিমবলিক লিঙ্ক সমাধান করে, তাই আয়না কপিতে symlinks মূল গাছে যারা হিসাবে একই অবস্থানে নির্দেশ করবে।

এই কৌতুক পেতে subshells ব্যবহার করে আলকাতরা ডিরেক্টরি রুট প্রতিফলিত করা এ অবস্থানে কমান্ড; আপনি (যুক্ত সহ তাদের এক চলে যাবে সিডি কমান্ড) আপনি আগে থেকেই আছেন src বা DEST ডিরেক্টরি:

# already in src?
user@host:/src$ tar cf - . | ( cd /path/to/dest ; tar xf - )

# already in dest?
user@host:/dest$ ( cd /path/to/src ; tar cf - . ) | tar xf - 

# just need src/foo?
# this result will be a mirror copy at dest/foo 
user@host:/src$ tar cf - foo | ( cd /path/to/dest ; tar xf - )

# mirror to another system?
user@host:/src$ tar cf - . | ssh user@example.com '( cd /path/to/dest ; tar xf - )'

আবার, প্রতিবারের মতো আপনি প্রতীকী লিঙ্কগুলি অনুলিপি করতে চান এটি উপযুক্ত নয়, তবে এটি জানতে খুব দরকারী স্নিপেট।


1
আমার অভিজ্ঞতার তুলনায় টার অবশ্যই স্পষ্টতই বেশি পোর্টেবল
ড্যান উজ্জ্বল

4

চেষ্টা করুন: সিপি-প্রিপ সিমিলিংক গন্তব্য

[root@station1 temp]# ls -l
total 8
-rw-r--r-- 1 root root  0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
[root@station1 temp]# cp -rp /tmp/temp/abc.link1 /tmp/temp/abc.link2
[root@station1 temp]# ls -l
total 12
-rw-r--r-- 1 root root  0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
lrwxrwxrwx 1 root root 13 Jul 27 18:42 abc.link2 -> /tmp/temp/abc
[root@station1 temp]# 

ওএস - সেন্টোস 5 (লিনাক্স)


3

উবুন্টুতে যখন কোনও ডিরেক্টরিতে লিঙ্ক এবং ফাইলগুলি অনুলিপি করা হয়:

cp --no-dereference --preserve=links

5
cp -d
এটির

1
আমি উভয়ই মনে করি cp -aএবং cp --preserve=linksপ্রশ্ন জিজ্ঞাসা করার চেয়েও বেশি কিছু করে। যেহেতু আমি এটি বুঝতে পারি, এটি যে কেউই ব্যবহার করার জন্য সঠিক উত্তর cp, যদিও কেবলমাত্র প্রশ্নগুলির মতো ফাইল (কোনও ডিরেক্টরি নেই) দিয়ে --no-dereferenceকোনও প্রভাব ফেলবে না।
পালসুইম

2

-Pবিকল্পটি ব্যবহার করুন , যেমন উপরে ইগনাসিও ভাস্কেজ-আব্রামগুলি লিখেছেন । তিনি যা উল্লেখ করেন নি -Pতার কার্যকারিতা নেই -R। সুতরাং আপনার অন্তত প্রয়োজন cp -RP

(সাইটটি আমাকে এখনও মন্তব্য করতে দেয় না তাই আমি পৃথক উত্তর পোস্ট করেছি))


একটি পুরানো সোলারিস বাক্সে আমার সিপি -d সমর্থন করে না। সিপি-আরপি আমার পক্ষে কাজ করেছিল; (-আর এবং-আর-এর মধ্যে পার্থক্য চিহ্নিত করুন, -আর আমার জন্য কাজ করে)।
স্পিওটার

1

সিপি-এস এবং সিপি-এল হ'ল বিশেষ কমান্ড। আপনার প্রয়োজনের জন্য, কিছুই ব্যবহার করবেন না।

উদাহরণস্বরূপ একটি এবং একটি প্রতীকী লিঙ্ক বি সমন্বিত একটি ডিরেক্টরি ডিআইআর অনুলিপি করা হচ্ছে।

  • সিপি-এস ডিআইআর / * এন / অনুলিপি করার পরিবর্তে একটি প্রতীকী লিঙ্ক তৈরি করে, এন / এ -> ../ ডিআইআর / এ (লিঙ্ক) এবং এন / বি -> (../ ডিআইআর / বি) যা একটি লিঙ্কের সাথে লিঙ্কযুক্ত
  • সিপি-এল ডিআইআর / * এন / লিংক ডেরিফারেন্সিং সহ অনুলিপি, এন / এ, এন / বি (ডিআইআর / এ হিসাবে একই)

আপনার যা প্রয়োজন তা হ'ল এন / এ (= ডিআইআর / এ), এবং এন </ b>> / এন / এ; সুতরাং সিপি -পি বিকল্পটি ব্যবহার করে কেবল বিনামুলকতা অনুলিপি করুন। আমি বিশ্বাস করি এটি সিপির জন্যও ডিফল্ট।

  • -পি-ডি-রেফারেন্স, লিঙ্কগুলি সংরক্ষণ করুন
  • -d =-মোড, মালিকানা, টাইমস্ট্যাম্প সংরক্ষণ করার জন্য -p বিকল্পের সাথে একত্রিত হয়
  • ডিরেক্টরিগুলি অনুলিপি করে অনুলিপি করতে -আর -আর বিকল্পটি একত্রিত করে

উল্লেখ করুন man cpবা cp --helpআরও বিকল্পের জন্য।

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