ডিরেক্টরি / ফাইল সমন্বয় অনুসন্ধান করা সম্ভব?


12

আমার একটি চিত্র খুঁজে পাওয়া দরকার, বলুন ABC.jpg, যেটি আমি জানি যে প্রোগ্রামিকভাবে এটিবিসি_এমপিএসসি নামের একটি ডিরেক্টরিতে স্থাপন করা হবে। আমি চেষ্টা করেছিলাম:

cd /
find . -name "ABC_MPSC/ABC.jpg"

তবে এটি কোনও কিছুই ফেরায় না (আমি আসলে জানি যে আমি সুনির্দিষ্ট যেটি সন্ধান করছিলাম এটি কোথায়, তাই আমি জানি এটি বিদ্যমান)। এমন কোনও ফাইন্ড কমান্ড আছে যা আমাকে নিজে নিজে অনুসন্ধান করতে না পারে?


খুব অনুরূপ: unix.stackexchange.com/q/342392/117549 ; এছাড়াও: unix.stackexchange.com/q/352844/117549
জেফ

2
আপনি এটি ব্যবহার করে এটিও খুঁজে পেতে পারেন locateযা উল্লেখযোগ্যভাবে দ্রুত হওয়া উচিত, তবে কেবলমাত্র updatedbশেষ মুহুর্তে যখন ফাইলটি ইতিমধ্যে বিদ্যমান ছিল তখনই কাজ করে ।
সাইমন রিখটার

উত্তর:


17

এখানে একটি -pathভবিষ্যদ্বাণী রয়েছে যা এখানে দরকারী:

find . -path '*/ABC_MPSC/ABC.jpg'

POSIX বিবরণ যে বিধেয় জন্য:

প্যাটার্ন ম্যাচিং নোটেশনে বর্ণিত প্যাটার্ন ম্যাচিং স্বরলিপি ব্যবহার করে যদি বর্তমান পথের নামটি প্যাটার্নটি মেলে তবে প্রাথমিকটি সত্য হিসাবে মূল্যায়ন করবে। ফাইলনাম এক্সপেনশনের জন্য ব্যবহৃত প্যাটার্নগুলিতে অতিরিক্ত নিয়মগুলি প্রযোজ্য না কারণ এটি কোনও ম্যাচিং অপারেশন, প্রসারণ নয়।

আপনার -name "ABC_MPSC/ABC.jpg"ব্যর্থতার কারণ হ'ল -nameভবিষ্যদ্বাণীক:

যদি বর্তমান পথের ভিত্তিটির নামটি প্যাটার্নের সাথে মেলে তবে সত্য হিসাবে মূল্যায়ন করা উচিত

অন্য কথায়, বর্তমান ফাইলের -nameনামের ডিরেক্টরিটি কখনই দেখতে পাবে না , কেবলমাত্র বেস ফাইল ফাইলের নাম (এবিসি.জেপিজি, উদাহরণস্বরূপ)।


10

দুটি উপায় ( ব্যবহার-path বাদে ):

  1. ডিরেক্টরিটি অনুসন্ধান করুন, তারপরে ফাইলটি সনাক্ত করুন:

    find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
    

    এটি প্রাপ্ত ডিরেক্টরিটির বর্তমানের নামটি findপ্রসারিত {}করতে বাস্তবায়নের উপর নির্ভর করে , যদিও এটি সংক্ষিপ্ত হয়ে থাকে /ABC.jpg(এটি করার প্রয়োজন হয় না)। এটি হিসাবে লেখা যেতে পারে

    find / -type d -name 'ABC_MPSC' \
        -exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
    
  2. ফাইলটি সন্ধান করুন, তারপরে এটির মূল নামটির নামটি পরীক্ষা করুন:

    find / -type f -name 'ABC.jpg' -exec sh -c '
        case $(dirname "$1") in
            */ABC_MPSC) exit 0 ;;
            *) exit 1
        esac' sh {} \; -print
    

এই দুটি বিকল্পই -pathজেফের দেখানোর মতো ব্যবহারের চেয়ে ধীর হবে । আমি তাদের এখানে উদাহরণ হিসাবে খুব কম রাখছি কারণ তারা সম্ভবত অন্যান্য জিনিসের সাথে মানিয়ে নিতে পারে।

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