কীভাবে লিঙ্কের টার্গেটের সম্পূর্ণ পথ পাবেন get


13

আমার সাথে যদি একটি প্রতীকী লিঙ্ক /var/opt/fooতৈরি হয় ln -fs /path/to/target/dir foo। কেবল লিঙ্কটি দেখতে পাওয়া স্ক্রিপ্টে আমি কীভাবে পারি /path/to/target/dir?

আমি স্ক্রিপ্টে যা অর্জন করতে চাই তা করার rm -rf /path/to/target/dirআগে আমার ln -fs /path/to/another/dir foo

উত্তর:


30
link=/var/opt/foo

target=$(readlink "$link")

$target ফাইল লিস্টে যেমন সংরক্ষণ করা হয়েছিল ঠিক তেমনই এখন লিঙ্কটির লক্ষ্য।

সিমলিংকগুলি আপেক্ষিক হতে পারে, তবে এটি সাধারণ ব্যবহারের জন্য ভাল:

target=$(readlink -f "$link")

নোট করুন যে এটি readlinkGNU Coreutils থেকে ব্যবহার করে, যা বিএসডি এবং অন্যান্য সিস্টেমে থাকতে পারে না।

সম্পাদনা: readlink -f বিএসডিগুলিতে কাজ করে, যতক্ষণ লিঙ্ক লক্ষ্য বিদ্যমান থাকে। realpathঅন্যটি, BSD- কেবল, এমন একটি সরঞ্জাম যা একইভাবে কাজ করে।


1
৪.২ বিএসডি'র readlink()দিন থেকে বিএসডিগুলির একটি সিস্টেম কল ছিল । বর্তমান বিএসডি'র readlink ইউটিলিটি ফ্রিবিএসডি ৪.১০ সহ প্রকাশিত হয়েছিল। এটি (পুনরায়) statকমান্ডের জন্য শক্ত লিঙ্ক হিসাবে প্রয়োগ করা হয়েছিল ( ম্যাকোস এক্স ম্যানুয়াল পৃষ্ঠা ফ্রিবিএসডি 9 ম্যানুয়াল পৃষ্ঠা )। লক্ষ্য করুন এটির কোনও -mবিকল্প নেই।
জেডিবিপি

@ জেডিবিপি: ধন্যবাদ এটির রয়েছে -fএবং readlink -fএটিও ঠিক কাজ করে (ধরে নিচ্ছে লিঙ্ক লক্ষ্য উপস্থিত রয়েছে)। বিএসডি-তে, এর realpathআরেকটি বিকল্প বলে মনে হয় readlink -m
user1686

0

একটি উপায় হ'ল (আমি আরও ভাল সংস্করণের আশা করছি)

olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"

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