আমি কীভাবে সর্বাধিক, তবে সমস্ত নয়, প্রতীকী লিঙ্কগুলি অনুসরণ করব?


10

আমার ওএস এবং হোম ডিরেক্টরি একটি এসএসডি রয়েছে। আমি একটি হার্ড ডিস্কে কিছু বড় ফাইল সঞ্চয় করি এবং আমার হোম ডিরেক্টরি থেকে হার্ড ডিস্কে সিমিলিংক (যেমন ~ / ভিডিও / ফিল্মগুলি / mnt / hdd / Films এ একটি সিমিলিঙ্ক)। আমার কাছে বেশ কয়েকটি ওয়াইন উপসর্গ রয়েছে, যার প্রত্যেকটিতে ডস ডিভাইস / জেড রয়েছে: সাথে সিলেক্ট করা হয়েছে।

সুতরাং, যদি আমি -L ছাড়াই সন্ধান করি তবে এটি হার্ড ডিস্কে থাকা সমস্ত কিছু মিস করবে। তবে যদি আমি -L এর সাথে সন্ধান করি তবে এটি ওয়ানের সিমনলিংকের কারণে / এ লুপে শেষ হবে।

এটি সমাধান করার কোনও বুদ্ধিমান উপায় আছে কি, যাতে আমি এটি যেখানে চাই সেখানে অনুসন্ধান করে? স্বজ্ঞাতভাবে, আমি "সিমলিংকগুলি অনুসরণ করুন" এর ধারাবাহিকতায় কিছু চাই, যদি না সেগুলি ডসডভাইসেস নামে পরিচিত কোনও ডিরেক্টরিতে থাকে। "হার্ড ডিস্কের কিছুতে থাকা সিমলিঙ্কগুলি অনুসরণ করুন" খুব কার্যকর হবে।

উত্তর:


11

-pruneপ্রাথমিক বলে findএকটি ডিরেক্টরি অধীনে recurse না।

find -L -path ~/.wine/dosdevices -prune -o -type f -name 'My Favorite Movie.*' -print

আপনি যদি -lnameনিজের অবস্থাতে ব্যবহার করতে চান তবে আপনি -Lবিকল্পটি ব্যবহার করতে পারবেন না , কারণ -Lবেশিরভাগ পূর্বাভাসকর্তা লিংকের লক্ষ্যে কাজ করার কারণ -lname। সেক্ষেত্রে আমার প্রস্তাবনাটি হ'ল আপনার হোম ডিরেক্টরি এবং হার্ড ডিস্ক রুটকে আপনার অনুসন্ধানের মূল হিসাবে ব্যবহার করা।

find ~ /mnt/hdd -xtype f -name 'My Favorite Movie.*'

আপনি find ~ -type l …প্রতীকী লিঙ্কগুলির একটি তালিকা সংগ্রহ করতে এবং এগুলি অতিরিক্ত শিকড় হিসাবে ব্যবহার করতে দৌড়াতে পারেন।

( IFS=$'\n'; set -f;
  find ~ $(find ~ -type l -lname '/mnt/hdd/*') \
       -xtype f -name 'My Favorite Movie.*' )

আপনি যদি সত্যিই প্রতীকী লিঙ্কগুলির অধীনে পুনরাবৃত্তি করতে চান তবে আপনি নির্দিষ্ট চিহ্নের পরিবর্তে নামের পরিবর্তে লক্ষ্যবস্তু বাদ দিতে পারেন। তবে আপনি কেবল একটি সীমাবদ্ধ তালিকা বাদ দিতে পারেন, কোনও প্যাটার্ন বা সাবট্রি এভাবে নয়।

find -L \( -samefile /exclude/this -o -samefile ~/and/that \) -prune -o \
     -type f -name 'My Favorite Movie.*' -print

আপনি অন্যান্য মানদণ্ডগুলি ব্যবহার করতে পারেন ! -writable( যেমন আপনার কাছে ফাইল লেখার অনুমতি নেই এমন ফাইলগুলি) তবে আমি মনে করি না যে জিএনইউ সন্ধানী লিঙ্কের অধীনে পুনরাবৃত্তি করার একটি উপায় কেবলমাত্র যদি তাদের টার্গেট পাঠ্যটি একটি নির্দিষ্ট অভিব্যক্তির সাথে মেলে।

আপনি একটি findকমান্ড তৈরি করতে পারেন যা যথেষ্ট চান সিম্বলিক লিঙ্কগুলি বাদ না দিয়ে, ক্যোয়ারিকে পার্ল স্ক্রিপ্টে রূপান্তর করতে Find2perl চালান , এবং পার্ল স্ক্রিপ্টটি কিছুটা সামান্য তিরস্কার করতে পারেন। GNU- এর অনেকগুলি স্যুইচ রয়েছে যা Find2perl সনাক্ত করতে পারে না।


ধন্যবাদ! -pruneআমি যা খুঁজছিলাম ঠিক সেটাই। আমি খুঁজে পেয়েছি যে find ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype dআমি অনুসরণ করতে চাই না এমন সমস্ত প্রতীকের তালিকা তৈরি করে; আমি এখন সেই প্রশ্নটি ছাঁটাই করতে ব্যবহার করার একটি উপায় খুঁজতে চেষ্টা করছি।
মার্ক রেমন্ড

@ মার্করেমন্ড সাধারণ নীতিটি হ'ল find ~ <negative criteria> -prune -o <positive criteria> -print, তাইfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d -prune -o <whatever it is you want> -print
গিলস'স-অশুভ হওয়া বন্ধ করুন '

@ গাইলস - এটি -L ছাড়াই সূক্ষ্ম কাজ করে তবে আমি একবার এল-এল যুক্ত করলে নাম-প্রকাশের অভিব্যক্তিগুলি আর কাজ করে না (ম্যান পেজটি বলে যে তারা তা করবে না)। তাই মূলত আমার তখন সিমলিংকগুলি অনুসরণ করার জন্য কিছু শর্ত প্রয়োজন এবং অন্যরা তা না করে!
মার্ক রেমন্ড

আপনি যা সন্ধান করতে চান ঠিক তা করার কোনও উপায় আমি ভাবতে পারি না। কিছু আনুমানিক জন্য আমার সম্পাদনা দেখুন।
গিলস 16'21

1

সমস্ত লিঙ্ক অনুসন্ধান করতে, এটি আমার জন্য কাজ করেছে:

find -L . -name \*.txt

0

আপনার কাছে হার্ড ডিস্কের কতটি সিমলিংক আছে? যদি এটি খুব বেশি না হয় তবে একটি সমাধান হ'ল "-L" ব্যবহার না করে স্পষ্টভাবে নির্দিষ্ট করে দেওয়া সিমলিংকগুলি সন্ধান করুন যা আপনি ফাইন্ড কমান্ড লাইনে অনুসরণ করতে চান। কিছুটা এইরকম:

find .  ~/Videos/Films -name '*file I want*' ...

এটি বর্তমান ডিরেক্টরি ("।") পাশাপাশি সিমলিংক "ms / ভিডিও / ফিল্মস" অনুসন্ধান করবে কিন্তু অন্যান্য প্রতিলিঙ্কে নামবে না।


0

আরেকটি সমাধান যা ইস্যুটি সাইড-স্টেপ করে (কমপক্ষে আমার ক্ষেত্রে এটি) হার্ড ডিস্কের ডিরেক্টরিগুলির জন্য প্রতীকী লিঙ্কগুলির পরিবর্তে বাইন্ড মাউন্টগুলি ব্যবহার করা। এটি এর /etc/fstabমতো এন্ট্রি যুক্ত করে এটি করা হয় :

/mnt/hdd/Films /home/mark/Videos/Films none bind 0 0

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