আপেক্ষিক পথের নামের সাথে একটি প্রতীকী লিঙ্ক তৈরি করুন


64

আমি এটা করতে পারবো:

$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt

তবে আমি এটি করতে সক্ষম হতে চাই:

$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt

এটা কি সম্ভব? আমি কি কোনওভাবে আপেক্ষিক পথের নামটি সমাধান করতে এবং এটিতে পাস করতে lnপারি?


তবে বর্ণিত আচরণের মাধ্যমে সমস্যাটি কী সমাধান হবে?
ফোর্সফেস্ক

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

2
ln -s $(pwd)/bar.txt ~/বা একটি ইনস্টল স্ক্রিপ্ট অন্তর্ভুক্ত।
ফোর্সফেস্ক

2
লিঙ্কটি আসলে আপনার নাম কমান্ড লাইনে ব্যবহার করে actually এই ফাইলটির নামের সাথে রেজোলিউশনটি লিঙ্কের জায়গার সাথে সম্পর্কিত হয়। আপনাকে ব্যবহার করতে হবেln -s foo/bar.txt /home/beau/bar.txt
pqnet

উত্তর:


62

আপনি যদি কোনও আপেক্ষিক পাথের সাথে প্রতীকী লিঙ্ক তৈরি করেন তবে এটি এটিকে আপেক্ষিক প্রতীকী লিঙ্ক হিসাবে সংরক্ষণ করবে, আপনার উদাহরণের মতো শোয়ের মতো পরম নয়। এটি সাধারণত একটি ভাল জিনিস। ফাইলসিস্টেম অন্য কোথাও মাউন্ট করা হলে নিখুঁত প্রতীকী লিঙ্কগুলি কাজ করে না।

আপনার উদাহরণটি কাজ না করার কারণটি এটি প্রতীকী লিঙ্কের মূল ডিরেক্টরিটির সাথে সম্পর্কিত এবং এটি কোথায় lnচালানো হয় না।

আপনি করতে পারেন:

$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt

বা এটির জন্য:

$ cd foo
$ ln -s foo/bar.txt ../bar.txt

এটি উপলব্ধি করা গুরুত্বপূর্ণ যে এর পরে প্রথম যুক্তিটি ln -sসিমলিংকের লক্ষ্য হিসাবে সঞ্চিত রয়েছে। এটি যে কোনও নির্বিচারে স্ট্রিং হতে পারে (একমাত্র বিধিনিষেধের সাথে এটি খালি থাকতে পারে না এবং NUL অক্ষরটি ধারণ করতে পারে না), তবে যে সময় সিমিলিংকটি ব্যবহার ও সমাধান করা হচ্ছে, সেই স্ট্রিংটি একটি আপেক্ষিক পথ হিসাবে বোঝা যাচ্ছে সিমিলিংকের মূল ডিরেক্টরি (যখন এটি শুরু হয় না /)।


2
ভালো বলেছ. আমি নিজের উত্তরটি টাইপ করার সময় আপনি এটির উত্তর দিয়েছিলেন। :)
শাদুর

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

"এই স্ট্রিংটি সিমিলিংকের মূল ডিরেক্টরিতে আপেক্ষিক পথ হিসাবে বোঝা যায়" - এটি সবকিছু ব্যাখ্যা করে!
বোজন কোমাজেক

24

আপনি যদি নতুন কোরিউটিলগুলি ব্যবহার করেন (আমি কোর্টিলস -8.22-11 ব্যবহার করছি), এটি করার একটি বিকল্প রয়েছে:

ln --help | grep relative

নির্বিচারে পাঠ্য ধারণ করতে পারে; যদি পরে সমাধান করা হয় তবে একটি সম্পর্কিত লিঙ্কটি হ'ল - সম্পর্কিত সম্পর্কিত লিঙ্কের অবস্থানের সাথে সম্পর্কিত প্রতীকী লিঙ্কগুলি তৈরি করুন

উদাহরণ স্বরূপ:

$ mkdir /tmp/test
$ touch /tmp/test/to
$ ln -rs /tmp/test/to /tmp/test/from
$ ls -l /tmp/test/from
    lrwxrwxrwx 1 ptr ptr 4 aug   25 17.02 /tmp/test/to -> from

হুঁ, আমার কাছে মনে হয় এরকম কোনও বিকল্প নেই -r। যদিও ম্যাক ব্যবহার করছি।
ivkremer

1
@ivkremer মনে হচ্ছে এই বিকল্পটি coreutils> = 8.16 (সূত্র: superuser.com/a/837935/403979 ) থেকে পাওয়া যায়
DJCrashdummy

আপেক্ষিক পতাকা ব্যবহার করা দেখে মনে হচ্ছে যে আমি "বহু সংখ্যক প্রতীকী লিঙ্কের" মুখোমুখি হয়েছি the
ভিক্স

12

দুঃখিত, না। প্রতীকী লিঙ্কগুলি লিঙ্কটি যে অবস্থানটিতে রয়েছে তার সাথে সম্পর্কিত, আপনি লিঙ্কটি তৈরি করার সময় আপনি যে অবস্থানটি করেছিলেন তা নয়। এই আচরণের জন্য বেশ কয়েকটি ভাল কারণ রয়েছে, যার বেশিরভাগের মধ্যে দূরবর্তী ফাইল সিস্টেমগুলি মাউন্ট করা জড়িত।


7

একটি সুবিধাজনক ছোট্ট ইউটিলিটি রয়েছে যার নাম symlinks(মূলত মার্ক লর্ডস, এখন জে। ব্র্যান্ড্ট বাকলে রক্ষণাবেক্ষণ করেছেন), অনেকগুলি লিনাক্স বিতরণে উপস্থিত।

ডিরেক্টরিতে সমস্ত পরম প্রতীক লিঙ্কগুলি আপেক্ষিক রূপান্তর করতে:

symlinks -c /path/to/directory

দুর্ভাগ্যক্রমে কোনও একক লিঙ্ক রূপান্তর করার কোনও বিকল্প নেই, আপনাকে প্রথমে এটি নিজের ডিরেক্টরিতে নিয়ে যেতে হবে।

mkdir ../tmp
mv link-to-relativize ../tmp
symlinks ../tmp
mv ../tmp/* .
rmdir ../tmp

ধন্যবাদ। উপলব্ধ symlinks GitHub । জে ব্র্যান্ড্ট বাকলে রক্ষণাবেক্ষণ করেছেন। v1.4.3
এভজেনি ভেরেশচাগিন

3

আপনি চেষ্টা করতে পারেন:

ln -s `pwd`/bar.txt /home/beau/bar.txt

তবে, এটি পরম পথের নামের সাথে একটি প্রতীকী লিঙ্ক তৈরি করে। আপনার পাঠ্য প্রশ্নে আপেক্ষিক পথের নাম উল্লেখ করা হয়েছে ...

সাধারণত, একটি আপেক্ষিক পথের নাম হ'ল আপনি যা চান এবং ln -sআপনাকে কী দেয়। আমার মনে হয় আপনি যা চান তা হ'ল:

cd /home/beau
ln -s foo/bar.txt bar.txt

1

যেহেতু সর্বাধিক সাধারণ শেলগুলি পাথগুলি প্রসারিত করে, আপেক্ষিক সিমিলিংক তৈরি করতে আপনার "উত্স পথ" উদ্ধৃত করা উচিত।

এছাড়াও, -sপ্যারামিটার মানে --symboliclnডিফল্ট হিসাবে হার্ড লিঙ্ক তৈরি করে।

$ ln -s '../../relative_path' path
$ ls -al path

lrwxrwxrwx 1 empjustine empjustine 19 Aug  6 01:38 path -> ../../relative/path

0

আপনি যদি নিশ্চিত হন যে আপনার মাউন্ট পয়েন্টগুলি পরিবর্তনের কোনও সম্ভাবনা নেই তবে আপনি এটির মতো ব্যাশ শেলটিতে যা করার চেষ্টা করছেন তা অর্জন করতে পারেন:

ln -s `pwd`/bar.txt ~/bar.txt

এটি ধরে নিয়েছে যে প্রতীকী লিঙ্কটি করার সময় আপনি লক্ষ্য ডিরেক্টরিতে রয়েছেন।

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