(1) এর-এক্সেক বিকল্প (কোঁকড়ানো ধনুর্বন্ধনী এবং প্লাস চিহ্ন) বোঝা


17

নিম্নলিখিত কমান্ডটি ব্যবহার করে, কেউ দয়া করে ব্যাখ্যা করতে পারবেন যে কোঁকড়া ধনুর্বন্ধনী ({}) এবং আরও চিহ্ন (+) সমাপ্তির জন্য ঠিক কী কী?

এবং কমান্ডটি যদি কমান্ড থেকে বাদ দেওয়া হয় তবে তারা কীভাবে আলাদাভাবে কাজ করবে?

find . -type d -exec chmod 775 {} +

উত্তর:


19

কোঁকড়া ধনুর্বন্ধনী findকমান্ডের ফলাফল দ্বারা প্রতিস্থাপিত হবে , এবং chmodতাদের প্রতিটি চালানো হবে। +তোলে findসম্ভব কয়েক কমান্ড হিসাবে চালানোর জন্য প্রচেষ্টা (তাই হয়, chmod 775 file1 file2 file3যেমন উল্টোদিকে chmod 755 file1, chmod 755 file2, chmod 755 file3)। তাদের ছাড়া কমান্ডটি কেবল একটি ত্রুটি দেয়। এই সমস্ত ব্যাখ্যা করা হয় man find:

-exec command ;

      সম্পাদন কমান্ড ; সত্য যদি 0 টি স্ট্যাটাস ফিরে আসে। নিম্নলিখিত সমস্ত আর্গুমেন্ট find' ;' এর সমন্বিত একটি যুক্তি উপস্থিত না হওয়া অবধি কমান্ডটিতে আর্গুমেন্ট হিসাবে নেওয়া হবে । STRING ' {}' বর্তমান ফাইলের নাম দ্বারা প্রতিস্থাপিত হয় প্রক্রিয়া করা হচ্ছে সর্বত্র কম্যান্ড আর্গুমেন্ট ঘটে, শুধু আর্গুমেন্ট যেখানে এটি একা হয়, কিছু সংস্করণে হিসাবে find। ...

-exec command {} +

      -execক্রিয়াটির এই রূপটি নির্বাচিত ফাইলগুলিতে নির্দিষ্ট কমান্ড চালায়, তবে প্রতিটি নির্বাচিত ফাইলের নাম শেষে অন্তর্ভুক্ত করে কমান্ড লাইনটি নির্মিত হয়; কমান্ডের অনুরোধের মোট সংখ্যা মিলিত ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে। ...


12

টেরডনের উত্তর ছাড়াও,

  • "অবশ্যই" -exec …একটি সেমিকোলন ( ;) বা একটি যোগ চিহ্ন ( +) দিয়ে শেষ করতে হবে। সেমিকোলন শেল (অথবা, অন্তত, যে শেল আমি কখনো ব্যবহার করেছি) একটি বিশেষ অক্ষর, তাই, যদি এটা ব্যবহার করা হয় অংশ হিসেবে findকমান্ড , এটা পলান বা উদ্ধৃত করা হবে ( \;, ";", অথবা ';')।
  • এর সাথে -exec … ;, {}কমান্ডটিতে স্ট্রিংটি যে কোনও অবস্থাতে শূন্য বা দুটি বা আরও বেশি সংখ্যক বার প্রদর্শিত হতে পারে ।  দেখুন এই কেন আপনি কি করতে চান হতে পারে উদাহরণের জন্য -execব্যবহার না করেই {}  দুই বা ততোধিক চেহারাগুলো রয়ে দরকারী প্রধানত কারণ মধ্যে (কমপক্ষে) এর কিছু সংস্করণে find, {}নিজেই করে একটি শব্দ হতে হবে না; এটির শুরু বা শেষের দিকে অন্যান্য অক্ষর থাকতে পারে; যেমন,

    find . -type f -exec mv {} {}.bak ";"
    

    এর সাথে -exec … +, {}স্ট্রিংটি অবশ্যই শেষ আর্গুমেন্ট হিসাবে উপস্থিত হওয়া উচিত+ । একটি কমান্ড

    find . -name "*.bak" -exec mv {} backup_folder +
    

    ছদ্মবেশী find: missing argument to ‘-exec’ত্রুটি বার্তায় ফলাফল ।

    • নির্দিষ্ট এর এই জন্য একটি কার্যসংক্রান্ত cpএবং mvকমান্ড হল

      find . -name "*.bak" -exec mv -t backup_folder {} +
      

      অথবা

      find . -name "*.bak" -exec mv --target-directory=backup_folder {} +
      

    {}নিজে একটি শব্দ হওয়া আবশ্যক; এটির শুরু বা শেষে অন্যান্য অক্ষর থাকতে পারে না। এবং (কমপক্ষে) কয়েকটি সংস্করণে findআপনার একাধিক নাও থাকতে পারে {}

  • একটি বিবেক নোট: আপনি বলতে পারেন

    অনুসন্ধান . -name "* .sh" -প্রকার এফ-এক্সিকিউটেবল-এক্সেক {} }চ্ছিক আরোগুলি এখানে ";"

    আপনার প্রতিটি স্ক্রিপ্ট চালাতে। কিন্তু

    অনুসন্ধান . -নাম "* .শ" -প্রকার-এফ-এক্সিকিউটেবল-এক্সেক {} +

    প্যারামিটার হিসাবে অন্য সমস্তগুলির নাম সহ আপনার স্ক্রিপ্টগুলির একটি চালায় । এটি বলার মতোই

    ./*.sh
    

    শেল কমান্ড হিসাবে, findএটির ফলাফলগুলি বাছাইয়ের গ্যারান্টি দেয় না, সুতরাং আপনি দৌড়ের সাথে যেমন থাকবেন তেমন আপনাকে দৌড়ানোর aaa.sh (আপনার বর্ণানুক্রমিক প্রথম *.shফাইল) গ্যারান্টি দেওয়া হয় না ./*.sh

  • এর একটি দিকটি findপ্রাথমিকভাবে পুরোপুরি পরিষ্কার নাও হতে পারে হ'ল কমান্ড লাইনটি কার্যকরভাবে একটি আরকেন ভাষায় একটি নির্বাহযোগ্য বিবৃতি । উদাহরণ স্বরূপ,

    find . -name "*.sh" -type f -executable -print
    

    মানে

    for each file
        if the file’s name matches `*.sh` (i.e., if it ends with `.sh`)
        then
            if it is a plain file (i.e., not a directory)
            then
                if it is executable (i.e., the appropriate `---x--x--x` bit is set)
                then
                    print the file’s name
                end if
            end if
        end if
    end loop
    

    বা, সহজভাবে,

    for each file
        if the file’s name matches `*.sh`  AND  it is a plain file  AND  it is executable
        then
            print the file’s name
        end if
    end loop
    

    কিছু -কীওয়ার্ড হ'ল একটি এক্সিকিউটেবল অ্যাকশন এবং পরীক্ষা। বিশেষত, এটি সত্য -exec … ;; উদাহরণ স্বরূপ,

    find . -type f -exec grep -q cat {} ";" -print
    

    অনুবাদ

    প্রতিটি ফাইলের জন্য
        যদি এটি সরল ফাইল হয় (যেমন, ডিরেক্টরি নয়)
        তারপর
            গ্রেপ-কিউ বিড়াল ফাইলের নাম চালান
            যদি প্রক্রিয়া সফল হয় (যেমন, 0 স্ট্যাটাসের সাথে প্রস্থান হয়)
            তারপর
                ফাইলের নাম মুদ্রণ করুন
            শেষ যদি
        শেষ যদি
    শেষ লুপ

    যা স্ট্রিং " cat" যুক্ত সমস্ত ফাইলের নাম মুদ্রণ করবে । এবং এটি যখন এমন কিছু যা grepনিজেই করতে পারে ( -l(লোয়ার-কেস L) বিকল্পের সাহায্যে)) তবে findএটি নির্দিষ্ট স্ট্রিংযুক্ত এবং নির্দিষ্ট আকারের ফাইল রয়েছে এবং নির্দিষ্ট মালিকের মালিকানাধীন ফাইলগুলি খুঁজে পেতে এটি ব্যবহার করে কার্যকর হতে পারে এবং একটি নির্দিষ্ট সময়সীমার মধ্যে পরিবর্তন করা হয়েছিল,…।

    তবে, এটি কাজ করে না -exec … +। যেহেতু -exec … +একাধিক ফাইলের জন্য একটি কমান্ড কার্যকর করে, তাই এটি for each file …লুপের অভ্যন্তরে যৌক্তিক শর্ত হিসাবে ব্যবহার করা বোধগম্য নয় ।

  • উপরের ফ্লিপ দিকটি হ'ল findআপনি যদি অবৈধ যুক্তি না দেয় বা এটি পড়তে পারে না এমন কোনও ডিরেক্টরের মুখোমুখি হয় তবে আপনি 0 এর প্রস্থান স্থিতি দিয়ে সাধারণত প্রস্থান হন। এমনকি যদি আপনি কার্যকর করেন এমন কোনও প্রোগ্রাম ব্যর্থ হয় (একটি শূন্য-বহির্গমন স্থিতি findসহ প্রস্থান করে ), 0 এর প্রস্থান স্থিতি দিয়ে প্রস্থান করবে  তবে আপনি  যদি কোনও প্রোগ্রাম -exec … +ব্যর্থ (অ-শূন্য বহির্গমন স্থিতি সহ প্রস্থান করে) দিয়ে চালিত করেন, ব্যতীত findযদি প্রস্থান করা হয় একটি শূন্য-বহির্গমন স্থিতি সহ

কয়েক মিলিয়ন সিস্টেমে প্রকৃতপক্ষে find(1) কী findঘটে যায় তার মিলিয়ন সংস্করণ এবং পরীক্ষার পাশাপাশি ওপেন গ্রুপ বেস স্পেসিফিকেশন ইস্যু 7, 2013 সংস্করণটিfind অবশ্যই কী , কী করতে হবে এবং কী করবে না সে সম্পর্কে কিছু তথ্য সরবরাহ করে ।


3
আপনার ব্যবহারের উদাহরণটি ... -exec mv {} {}.bak ...সমস্ত findবাস্তবায়নের সাথে প্রত্যাশা অনুযায়ী কাজ করার গ্যারান্টিযুক্ত নয় বলে সাবধান হন । পসিক্স স্ট্যান্ডার্ড রাষ্ট্রগুলি {}অবশ্যই সর্বদা স্বীকৃত হওয়ার জন্য একা উপস্থিত হতে হবে, অন্যথায় অক্ষরগুলি অপরিবর্তিত রাখতে বা পথের নাম দ্বারা তাদের প্রতিস্থাপনের জন্য আচরণটি মুক্ত। পূর্ববর্তী ক্ষেত্রে, আপনার সম্পূর্ণ কমান্ডটি সমস্ত ফাইল মুছে ফেলবে তবে শেষটি পাওয়া গেল ...
jlliagre
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.