উত্তর:
-f
ক্যানোনিকালাইজড সংস্করণ মুদ্রণ করতে পতাকা ব্যবহার করুন । উদাহরণ স্বরূপ:
readlink -f /root/Public/myothertextfile.txt
থেকে man readlink
:
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
brew install coreutils
,। এটি অক্ষরের সাথে পূর্ববর্তী কমান্ডের বেসিক gnu সংস্করণগুলি ইনস্টল করে g
, যেমনgreadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
readlink এর manpages একটি নোট বলছে আছে "নোট realpath (1) ক্যাননিকাল করার কার্যকারিতার জন্য ব্যবহার করতে পছন্দের কমান্ড।"
রিডলিঙ্ক হ'ল আদেশটি যা আপনি চান। কমান্ডের জন্য আপনার ম্যান পৃষ্ঠাটি দেখতে হবে। কারণ আপনি যদি আসল ফাইলটিতে প্রতীকী লিঙ্কগুলির একটি শৃঙ্খলা অনুসরণ করতে চান তবে আপনার প্রয়োজন -e বা -f সুইচ:
$ ln -s foooooo zipzip # fooooo doesn't actually exist
$ ln -s zipzip zapzap
$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo
$ # Follows it, but file not there
$ readlink -e zapzap
$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip
এটিও কাজ করবে:
ls -l /root/Public/myothertextfile.txt
তবে readlink
পার্সিংয়ের চেয়ে স্ক্রিপ্টে ব্যবহারের জন্য পছন্দ করা হবে ls
।
আপনি যদি লিঙ্কটির উত্স এবং গন্তব্যটি দেখাতে চান তবে চেষ্টা করুন stat -c%N files*
। যেমন
$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’
এটি পার্সিংয়ের জন্য ভাল নয় ( readlink
এটির জন্য ব্যবহার করুন ) তবে এটি বিশৃঙ্খলা ছাড়াই লিঙ্কটির নাম এবং গন্তব্য দেখায়ls -l
-c
লিখিত হতে পারে --format
এবং এর %N
অর্থ "যদি প্রতীকী লিঙ্ক হয় তবে উদ্ধৃতিযুক্ত ফাইলের নাম উদ্ধৃত করা হবে"।
readlink
একটি ভাল জিনিস, কিন্তু গনুহ-নির্দিষ্ট এবং অ ক্রস প্ল্যাটফর্ম। আমি ক্রস প্ল্যাটফর্মের স্ক্রিপ্টগুলি লিখতাম /bin/sh
, তাই আমি এরকম কিছু ব্যবহার করতাম:
ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'
বা:
ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'
তবে এগুলি বিভিন্ন প্ল্যাটফর্মে পরীক্ষা করা দরকার। আমি মনে করি তারা কাজ করবে, তবে ls
আউটপুট ফর্ম্যাটের জন্য 100% নিশ্চিত নয় ।
ফলে ls
এটি করতে পারেন মধ্যে বিশ্লেষণ হতে bash
একটি বহিস্থিত কমান্ড মত উপর নির্ভর করে ছাড়া awk
, sed
অথবা perl
।
এই bash_realpath
ফাংশনটি, একটি লিঙ্কের চূড়ান্ত গন্তব্য সমাধান করে (লিঙ্ক → লিঙ্ক → লিঙ্ক → ফাইনাল):
bash_realpath() {
# print the resolved path
# @params
# 1: the path to resolve
# @return
# >&1: the resolved link path
local path="${1}"
while [[ -L ${path} && "$(ls -l "${path}")" =~ -\>\ (.*) ]]
do
path="${BASH_REMATCH[1]}"
done
echo "${path}"
}
আপনি যদি ব্যবহার করতে না পারেন readlink
, তবে এর ফলাফলটি বিশ্লেষণ করে ls -l
এভাবে করা যেতে পারে।
সাধারণ ফলাফল হবে:
ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan 1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt
সুতরাং আমরা "->" এর আগে এবং তীর অন্তর্ভুক্ত সমস্ত কিছু প্রতিস্থাপন করতে চাই। আমরা এটির sed
জন্য ব্যবহার করতে পারি :
ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt
ব্রায়ান-ব্রাজিলের একজন হিসাবে একটি সহজ উত্তর দেওয়ার জন্য প্রশ্নটি যথেষ্ট সঠিক নয়:
readlink -f some_path
পাথের সাথে জড়িত প্রতিটি সিমলিংকটি অবশ্যই চূড়ান্ত লক্ষ্যে পিছনের দিকে অন্তর্ভুক্ত করবে some_path
।
তবে এক স্তরের ক্যাসকেডিং সিমলিংক হ'ল একটি সিস্টেমে অন্যদের মধ্যে একটি বিশেষ ঘটনা, সাধারণ ক্ষেত্রে ক্যাসকেডিং সিমলিংকের N স্তর রয়েছে। আমার সিস্টেমে নিম্নলিখিতটি দেখুন:
$ rwhich emacs
/usr/bin/emacs
/etc/alternatives/emacs
/usr/bin/emacs24-x
rwhich
এটি আমার নিজের পুনরাবৃত্তিমূলক বাস্তবায়ন হ'ল which
অন্তর্বর্তী ক্যাসকেডিং সিমলিংকগুলি (স্টাডার থেকে) চূড়ান্ত লক্ষ্য (স্টাডাউট) পর্যন্ত নিচে ints
তারপরে যদি আমি জানতে চাই তবে কী:
সিমলিংক / ইউএসআর / বিন / ইমাসস ** এর লক্ষ্যমাত্রা, আমার কাছে সুস্পষ্ট উত্তরটি /etc/alternatives/emacs
ফিরে এসেছে:
readlink $(which emacs)
readlink /usr/bin/emacs
চূড়ান্ত ক্যাসকেডিং symlinks পিছনে লক্ষ্য / usr / bin / Emacs, উত্তর হইবে /usr/bin/emacs24-x
হিসাবে দ্বারা ফিরে:
readlink -f $(which emacs)
readlink -f /usr/bin/emacs
rwhich emacs 2>/dev/null
যদি আপনি কোনও ফোল্ডারের মধ্যে সমস্ত লিঙ্কের লক্ষ্য খুঁজে পেয়ে থাকেন এবং এর সাবফোল্ডারটি find . -type l -ls
লিঙ্ক প্রকারের সাথে নিম্নলিখিতভাবে কমান্ডটি ব্যবহার করুন :
me@local.localdomain:~/test$ find . -type l -ls
8601855888 0 lrwxr-xr-x 1 me staff 6 Jan 24 19:53 ./link -> target
আপনি যদি একটি একক এর লক্ষ্য চান, তবে ls -l
কাজ করা উচিত:
me@local.localdomain:~/test$ ls -l
total 0
lrwxr-xr-x 1 me staff 6 Jan 24 19:53 link -> target
-rw-r--r-- 1 me staff 0 Jan 24 19:53 target
readlink -f
।