ডিরেক্টরি খুঁজে পেতে সনাক্ত করা


20

আমি ব্যবহার সনাক্ত সব সময় যে ফাইল আমি নাম জানেন খোঁজার, চিহ্নিতকরণ খুব দ্রুত এবং আমি যে ভালোবাসি। জন্য সম্প্রতি তৈরি ফাইল খুঁজে স্বাভাবিকভাবে মূলত তারা যাতে আমি আমার সমগ্র ফাইল সিস্টেম অনুসন্ধান করতে হবে না তৈরি করা হয়েছিল যেখানে সম্প্রতি তৈরি ফাইল আমি জানি সঙ্গে, মহান।

আমি যখন কোনও ডিরেক্টরিটির অবস্থানটি ভুলে গিয়েছি তবে এটির কাছে আদর্শ খুঁজে পাওয়া যায় না বা খুঁজে পাওয়া যায় না।

সন্ধান করুন সর্বদা অনেক বেশি তথ্য স্পিট করে কারণ একটি ডিরেক্টরিতে থাকা প্রতিটি ফাইলও এটি অনুসন্ধানের জন্য একটি মিল। উদাহরণস্বরূপ যদি আমি আমার ফাইল সিস্টেমে একটি নামের ডিরেক্টরি লগ কোথাও অনুসন্ধানের জন্য ছিল চিহ্নিতকরণ লগ টন এবং ফলাফল টন ফিরে আসবে। যদি আমি একই জিনিসটি সন্ধানের সাথে করি, সন্ধান / -নেম লগ-টাইপ ডি সন্ধান চালাতে কয়েক মিনিট সময় নেয় এবং প্রতিবার যখন কোনও ফোল্ডারে এটি পড়তে না পারে তার মুখোমুখি হয়ে সমস্ত ধরণের অনুমতি ত্রুটি ছুঁড়ে ফেলে।

একটি ভাল উপায় আছে কি?

উত্তর: সুতরাং আমি অন্য কিছু না পাওয়া পর্যন্ত গ্রেপ দিয়ে আঁকছি:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

উত্তর:


12

একটি উপায় (আমার সন্দেহ হয় এর চেয়ে ভালতর উপায় থাকতে পারে) হ'ল গ্রেপ ব্যবহার করা কেবলমাত্র সেই সমস্ত পথগুলি ফোল্ডারের জন্য যা আপনার ফোল্ডারের নামে শেষ হয়:

locate foldername | grep /foldername$

28

আপনি এর বিকল্পটি --regex( -r) ব্যবহার করতে পারেন locate:

locate -r '/log$'

হ্যাঁ (+1)। locateনিজস্ব বিল্ট-ইন রেজেক্স ক্যাপাবিলিটি রয়েছে: -rবা --regex... সম্পূর্ণ পরিসীমা বিকল্পের জন্য দেখুন: তথ্য সন্ধান করুন
পিটার.ও

1
আমি জানতাম আরও ভাল উপায় থাকতে হবে!
মিস্টারবেন

তাই সংক্ষিপ্ত এবং এটি সহজে কাজ করে। দুর্দান্ত অবদান! নিয়মিত এক্সপ্রেশন
প্রিয়.by. জেসুস

এক্ষেত্রে আপনার দু'জনের দরকার নেই ': locate -r /log$যথেষ্ট।
সিমলিভ করুন

5

আপনি চেষ্টা করেছেন:

locate /home/insertusernamehere/*/filename?

অথবা

locate file | grep -i '^/home/.*/examplesubdirectory'?

বা এর কোন প্রকরণ?


এই উত্তরটি দেখায় যে grepএটি প্রয়োজনীয় নয় এবং প্রথম প্রস্তাবিত বিকল্পে যেমন দেখা গেছে, উভয়ই রিজেক্সস নয়।
টম

2

এটা এখানে

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

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