শুধুমাত্র উত্স ফাইল এবং লক্ষ্য সংযুক্ত ফাইলটি `ls` ব্যবহার করে দেখান`


11

আমি লক্ষ্য ফাইলটি দেখতে পারি যা একটি লিঙ্কটি ব্যবহার করে নির্দেশ করে ls -l:

snowch$ ls -l /usr/local/bin/mvn
lrwxr-xr-x  1 snowch  admin  29 12 Dec 08:58 /usr/local/bin/mvn -> ../Cellar/maven/3.2.3/bin/mvn

অ্যাজকের মতো অন্য কমান্ডের মাধ্যমে পাইপ না করে কি কম আউটপুট দেখানোর উপায় আছে? উদাহরণ:

snowch$ ls ?? /usr/local/bin/mvn
/usr/local/bin/mvn -> ../Cellar/maven/3.2.3/bin/mvn

আমি ওএস এক্স 10.9.5 এ 3.2.53 চালাচ্ছি। কয়েকটি কমান্ডের আউটপুট নীচে প্রদর্শিত হবে:

snowch$ ls -H /usr/local/bin/mvn
/usr/local/bin/mvn

snowch$ ls -L /usr/local/bin/mvn
/usr/local/bin/mvn

snowch$ file /usr/local/bin/mvn
/usr/local/bin/mvn: POSIX shell script text executable

snowch$ file -b /usr/local/bin/mvn
POSIX shell script text executable

উত্তর:


7

lsদুর্ভাগ্যক্রমে ফাইলের বৈশিষ্ট্য পুনরুদ্ধার এবং স্বেচ্ছাসেবী পদ্ধতিতে সেগুলি প্রদর্শনের কোনও বিকল্প নেই। কিছু সিস্টেমের জন্য পৃথক কমান্ড রয়েছে (উদাহরণস্বরূপ, জিএনইউতে জিএনইউতে একটি statআদেশ বা কার্যকারিতা রয়েছে find)।

বেশিরভাগ ফাইল সহ বেশিরভাগ আধুনিক সিস্টেমে এটি কাজ করা উচিত:

$ ln -s '/foo/bar -> baz' the-file
$ LC_ALL=C ls -ldn the-file | sed '
   1s/^\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{8\}//'
the-file -> /foo/bar -> baz

এটি আউটপুট প্রথম লাইনের প্রথম 8 টি ফাঁকা বিস্মিত ক্ষেত্রগুলি সরিয়ে কাজ করে ls -l। যে সিস্টেমে সেখানে গিডটি প্রদর্শিত হবে না বা বৃহত সংখ্যক লিঙ্ক রয়েছে সেখানে প্রথম 2 টি ক্ষেত্র একত্রে যোগদান করা ব্যতীত এটির কাজ করা উচিত।

জিএনইউ সহ stat:

$ LC_ALL=C stat -c '%N' the-file
'the-file' -> '/foo/bar -> baz'

জিএনইউ সহ find:

$ find the-file -prune \( -type l -printf '%p -> %l\n' -o -printf '%p\n' \)
the-file -> /foo/bar -> baz

ফ্রিবিএসডি / ওএস / এক্স স্ট্যাটাস সহ:

f=the-file
if [ -L "$f" ]; then
  stat -f "%N -> %Y" -- "$f"
else
  printf '%s\n' "$f"
fi

সঙ্গে zshস্ট্যান্ড:

zmodload zsh/stat
f=the-file
zstat -LH s -- "$f"
printf '%s\n' ${s[link]:-$f}

অনেকগুলি সিস্টেমে readlinkএকটি লিঙ্কের লক্ষ্য নির্দিষ্টভাবে পাওয়ার জন্য একটি কমান্ডও রয়েছে:

f=the-file
if [ -L "$f" ]; then
  printf '%s -> ' "$f"
  readlink -- "$f"
else
  printf '%s\n' "$f"
fi

stat -f "%N -> %Y" -- /usr/local/bin/mvnদুর্দান্ত কাজ করেছে ধন্যবাদ!
ক্রিস তুষার

1
পুরানো RHEL6 সিস্টেমে স্ট্যাট GNU কোর্টিলস 8.4 এর এবং এটিতে একটি stat -c %N -- /usr/local/bin/mvn। উদ্ধৃতিগুলি সরাতে আমাকে এটিকে পাইপ করতে হয়েছিল| perl -pe 's/['"'"'`]//g'
সিএফআই

@ cfi tr -d \'\`যথেষ্ট হবে। মনে রাখবেন যে RHEL সিস্টেমটিতে GNU থাকবে findযার সাথে আপনার আরও নিয়ন্ত্রণ থাকবে।
স্টাফেন চেজেলাস

5

fileকমান্ডটি ব্যবহার করুন ।

[sreeraj@server ~]$ ls -l mytest
lrwxrwxrwx 1 sreeraj sreeraj 15 Dec 12 09:31 mytest -> /usr/sbin/httpd

[sreeraj@server ~]$ file mytest
mytest: symbolic link to `/usr/sbin/httpd'

অথবা

[sreeraj@server ~]$ file -b mytest
symbolic link to `/usr/sbin/httpd'
[sreeraj@server ~]$

এছাড়াও, দয়া করে লোক পৃষ্ঠার মাধ্যমে পড়া যেতে lsএবং বিকল্প পরীক্ষা -Lএবং -Hএবং যে যদি আপনার প্রয়োজন যথেষ্ট হবে দেখুন।


শীতল, প্রতিদিন নতুন কিছু শিখুন।
ডাকাতি

@ শ্রী - অনেক ধন্যবাদ! আমি lsবিকল্পগুলি চেষ্টা করেছিলাম , কিন্তু না file। দুর্ভাগ্যক্রমে, দুটোই কাজ করছে বলে মনে হচ্ছে না :(
ক্রিস স্নো

@ এসএইচসি দুঃখিত, আমি ধরে নিয়েছি যে আপনি একটি linuxবাক্সে রয়েছেন । osxআপনার ট্যাগগুলির মধ্যে একটি হিসাবে যোগ করুন । এটি osxব্যবহারকারীদের দৃষ্টি আকর্ষণ করা উচিত । আমি ট্যাগ যুক্ত করার জন্য পোস্টটি সম্পাদনা করেছি, তবে সম্পাদনাটি অবিলম্বে উপস্থিত হওয়ার জন্য আমার কাছে পর্যাপ্ত ক্রেডিট নেই।
শ্রী

@ শ্রী - কোন উদ্বেগ নেই, এবং বিভ্রান্তির জন্য দুঃখিত। আমি আপনার উত্তরটিকে যাইহোক আপডভোট করেছি কারণ যখন আমি একটি লিনাক্স মেশিনে আসি তখন এটি কার্যকর হবে।
ক্রিস তুষার

অক্সে 'রিডলিঙ্ক' ইউটিলিটি পরীক্ষা করতে পারে।
টোনিয়োক

2

lsকমপক্ষে একটি জিএনইউ দিয়ে (এবং স্পষ্টতই tcshপ্রয়োগ হিসাবে) আপনি পছন্দ করতে পারেন এমন $LS_COLORSডিলিমিটারগুলি সন্নিবেশ করতে পরিবেশের পরিবর্তনশীল হ্যাক করতে পারেন (তবে tcshবিল্টইন ls-Fলিঙ্ক টার্গেটগুলি করেন না - কেবল লিঙ্ক ফ্ল্যাগগুলি ) সাধারণত lsস্বেচ্ছাসেবীযুক্ত প্রিন্টযোগ্য টার্মিনালটি পলায়ন করে es সেই পরিবেশের মধ্যে সঞ্চিত মানগুলির উপর ভিত্তি করে, তবে এর পরিবর্তে স্বেচ্ছাচারী কিছু serোকানো থেকে আমাদের বিরত করার কিছুই নেই। আরো এই এখানে

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

LS_COLORS='ln=///\n:lc=:no=//:rc=:rs=:' \
\ls ~ -l --color=always | 
sed '\|///|,\|//|!d;//d'

এটি //প্রতিটি তালিকার মাথার মতো একটি স্ট্রিং রাখে (ঠিক ঠিক আগে lrwcrwx) এবং ///\nকোনও লিঙ্কের ফাইল নামের ঠিক আগে। sedতারপরে লাইন রেঞ্জগুলিতে ফিল্টারগুলি - এটি dমুখোমুখি হওয়া অবধি প্রতিটি ইনপুট লাইনকে একাদশ করবে ///এবং সেখান থেকে পরের লাইনের সাথে //এটি মেলে যা মিলবে লাইনগুলি মুছে ফেলবে //। তাই এটি কেবলমাত্র লিঙ্কের নাম এবং লিঙ্ক লক্ষ্য পায় - হস্তক্ষেপের অক্ষর নির্বিশেষে। এটি কারণ যে /কোনও ফাইলের নাম ঘটতে পারে না - এবং যে কোনও পথে lsমুদ্রণগুলি কেবল এককভাবে ঘটতে পারে।

দেখা?

mkdir test; cd test
touch 'long


name' shortname
ln -s l* "$(printf %s.ln l*)"; ln -s s* shortname.ln

LS_COLORS='ln=///\n:lc=:no=//:rc=:rs=:' \
\ls  -l --color=always | sed '\|///|,\|//|!d;//d'

... যা প্রিন্ট করে:

long


name.ln -> long


name
shortname.ln -> shortname

এটি নিজে চেষ্টা করো.


আপনি কি GNU এর আধুনিক সংস্করণগুলি ছাড়াও এমন কোনও বাস্তবায়ন সম্পর্কে জানেন যা সেভাবে lsসমর্থন LS_COLORSকরে এবং একটি --color=alwaysএবং আর্গুমেন্টের পরে বিকল্পগুলি? যদি কোনও জিএনইউ সিস্টেমে থাকে তবে আপনি যখন এমন কিছু ব্যবহার করতে পারেন যখন আপনি যখন ব্যবহার করতে পারেন তখন তা সংঘাতযুক্ত findবা statকেন ব্যবহার করতে পারেন ? আপনি সম্ভবত কিছু করলে তা সম্ভবত কাজ করবে না ln -s /// some-file
স্টাফেন চ্যাজেলাস

@StephaneChezales - এই অন্তত বোঝা যায় যে এটি একটি BSD সঙ্গে একভাবে কাজ করা উচিত ls। আমার মনে পড়ে যে অন্য কোথাও আগে lsসিনট্যাক্সের মতো টার্মক্যাপ গ্রহণ করার জন্য অন্য কোথাও ট্রেন্ডিং রয়েছে। ln -s ///জিনিসটি সম্পর্কে ভাল বক্তব্য - তবে \0NUL গুলি পাশাপাশি কাজ করে - এবং -Rকর্মসূচীর সাথে। কেন - ভাল, এটি ব্যবহার করা সহজ। কিছু ক্ষেত্রে এর চেয়ে সহজ find- এবং এখানে বিষয়টির চেয়ে এটি আরও কিছুটা বেশি মনে হয়েছিল find। যাই হোক না কেন, খুব বেশি লোক এটিকে বিবেচনা করে না, তাই আমার যখন মনে করিয়ে দেওয়া হয় তখন আমি এটি উল্লেখ করি।
মাইকজার্ভ

ফ্রিবিএসডি-র জন্য ম্যান পৃষ্ঠাটি বা সেখানে দেখুন । আপনি যদি ফ্রিবিএসডি-তে জিনিস পরীক্ষা করতে চান তবে আপনি ভিএম-তে ঘোস্টবিএসডি / এমএফএসএসএসডি এর মতো লাইভ সিডি ব্যবহার করতে পারেন।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস - না, এটি পরীক্ষা করার দরকার নেই - অবশ্যই সম্পূর্ণ আলাদা একটি প্রাণী । আপনি যদি নজর দিতে চান তবে এই উত্তরটির লিঙ্কটিতে gnu উত্সটিও যুক্ত রয়েছে। আমি ভাবছি আমি কোথায় পড়েছি? যদিও এটি উল্লেখ করার জন্য অনেক ধন্যবাদ, এটি একটি ভুল অনুমান যা বাতিল করতে পেরে খুশি হয়েছিল। ive উত্তর সম্পাদনা করেছে।
মাইকজার্ভ

সাম্প্রতিক সংস্করণগুলির tcshএকটি ls-Fবিল্টিন রয়েছে যা জিএনইউর LS_COLORSকয়েকটি সংস্করণ হিসাবে একইভাবে সমর্থন করে ls, তবে ls -Fআপনি যদি এটির কোনও বিকল্প পাস করেন তবে এটি অনুরোধ করে, যাতে এটি আপনার সিস্টেমে lsজিএনইউ না থাকলে এখানে কাজ করবে না ls
স্টাফেন চেজেলাস

-1

[লিনাক্স / ব্যাশে]

আমি এটি করতাম:

ls -l | sed -e"s/ \+/ /g" | cut -d' ' -f 9-

sedকমান্ড একটি একক স্থান একাধিক স্পেস ভেঙে; cutঅগ্রে 9 ম ক্ষেত্র চায়ের যেখানে ক্ষেত্র-বিভাজক একটি স্থান।

এটি থেকে সাধারণত আউটপুট:

libboost_atomic.a
libboost_atomic.so -> libboost_atomic.so.1.57.0
libboost_atomic.so.1.57.0
...
libboost_wserialization.a
libboost_wserialization.so -> libboost_wserialization.so.1.57.0
libboost_wserialization.so.1.57.0

বিকল্পগুলি হ'ল:

ls -l | awk '{ print $9, $10, $11 }'
ls -l | awk '{ $1 = $2 = $3 = $4 = $5 = $6 = $7 = $8 = "" ; print }'

তবে সেগুলি অসম্পূর্ণ: প্রথমটি স্থান অনুসরণ করতে পারে; দ্বিতীয়, নেতৃস্থানীয় স্পেস।


প্রশ্নটি স্পষ্টভাবে বলেছে "... অন্য আদেশ দিয়ে পাইপ না করে ..."
জেফ শ্যাচলার

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