কোনও ফাইল কোনও ডিরেক্টরিতে প্রতীকী লিঙ্ক কিনা তা আমি কীভাবে পরীক্ষা করব?


64

কোনও ফাইল উপস্থিত থাকলে এবং -L এর সাথে একটি প্রতীকী লিঙ্ক কিনা তা আমি পরীক্ষা করতে পারি

for file in *; do
    if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done

এবং যদি এটি -d সহ ডিরেক্টরি থাকে:

for file in *; do
    if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done

তবে আমি কীভাবে কেবল ডিরেক্টরিগুলির লিঙ্কগুলির জন্য পরীক্ষা করতে পারি?


আমি সব পরীক্ষার ফোল্ডারে সিমুলেটেড করেছি:

/tmp/test# ls
a  b  c/  d@  e@  f@

/tmp/test# file *
a: ASCII text
b: ASCII text
c: directory
d: symbolic link to `c'
e: symbolic link to `a'
f: broken symbolic link to `nofile'

উত্তর:


75

কেবল দুটি পরীক্ষার সাথে একত্রিত করুন &&:

if [[ -L "$file" && -d "$file" ]]
then
    echo "$file is a symlink to a directory"
fi

1
আপনি যদি লুকানো ফাইল এবং ডিরেক্টরিগুলি চেক করতে চান তবে এর আগে এইটি চালিয়ে যান:shopt -s dotglob
রুবো

2
[-L "$ ফাইল"] && [-d "$ ফাইল"] ভাল না? খোলসের মধ্যে পোর্টিবিলিটি সহ কিছু।
লেনার্ট রোল্যান্ড

3
@ লেনার্ট ওপির উদাহরণ কোড ব্যবহার করে [[এবং আমি এটিকে যৌক্তিক শুরুর দিক হিসাবে গ্রহণ করেছি। ফযীলত একটি আলোচনা [বনাম [[এই উত্তর (কিন্তু উপলব্ধ সুযোগ বাইরে এখানে )।

7

এখানে একটি একক কমান্ড যা পুনরাবৃত্তভাবে এমন লক্ষণগুলির তালিকা তৈরি করবে যার লক্ষ্য একটি ডিরেক্টরি (বর্তমান ডিরেক্টরিতে শুরু):

find . -type l -xtype d

তথ্যসূত্র: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to- ডিরেক্টরি


1

findএকটি ফাংশন সহ এবং ব্যবহার করে একটি সমাধান :

dosomething () {
    echo "doing something with $1"; 
}
find -L -path './*' -prune -type d| while read file; do 
    if [[ -L "$file" && -d "$file" ]];
        then dosomething "$file";
    fi; 
done

এর জন্য ব্যবহার findএবং একটি while readহ'ল কিন্ডা ওভারকিল ...
ক্যামিলো মার্টিন

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