ফাইন্ড-এক্সেক কমান্ডে {} + এর অর্থ কী?


23

আমি মানে জানতে চাই {} +মধ্যে execকমান্ড, এবং এর মধ্যে পার্থক্য কি {} +এবং {} \;। ঠিক বলতে গেলে, এই দুটিয়ের মধ্যে পার্থক্য কী:

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

5
এটি man find(1)খুব বিস্তারিতভাবে বর্ণনা করা হয়েছে, সহজেই যে কেউ খুঁজে পেতে পারে। অলসতা করবেন না।
মিরোস্লাভ কোক্কার

ধন্যবাদ প্রিয় মিরোস্লাভ, আমি অনুসন্ধান করেছি man exec!

আহ, আমি এর আগে কখনও {} +ব্যবহার করতে পারিনি । আমি সাধারণত (এবং প্রায়শই find ... -print0 | xargs -0 ...) এর জন্য xargs ব্যবহার করি

উত্তর:


27

ব্যবহার ;(সেমিকোলন) অথবা +(প্লাস চিহ্ন) আদেশ দ্বারা প্রার্থনা শেল কমান্ড বিনষ্ট করার জন্য বাধ্যতামূলক -exec/ execdir

;(সেমিকোলন) বা +(প্লাস চিহ্ন) এর মধ্যে পার্থক্য হ'ল আর্গুমেন্টগুলি কীভাবে অনুসন্ধানের -exec/ -execdirপ্যারামিটারে যায়। উদাহরণ স্বরূপ:

  • ব্যবহার করে ;একাধিক কমান্ড কার্যকর করা হবে (প্রতিটি যুক্তির জন্য পৃথকভাবে),

    উদাহরণ:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    নিম্নলিখিত সমস্ত যুক্তি findকমান্ডের আর্গুমেন্ট হিসাবে নেওয়া হয়।

    স্ট্রিংটি {}বর্তমান ফাইলের নাম দ্বারা প্রক্রিয়া করা হচ্ছে।

  • ব্যবহার +কমপক্ষে সম্ভাব্য কমান্ডগুলি কার্যকর করবে (যেমন আর্গুমেন্টগুলি একত্রিত করা হবে)। xargsকমান্ডটি কীভাবে কাজ করে তার সাথে এটি খুব মিল , সুতরাং লাইন প্রতি আর্গুমেন্টের সর্বাধিক সীমা ছাড়িয়ে যাওয়ার জন্য এটি যতটা সম্ভব কমান্ড হিসাবে অনেক আর্গুমেন্ট ব্যবহার করবে।

    উদাহরণ:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    কমান্ড লাইনটি প্রতিটি নির্বাচিত ফাইলের নাম শেষে যুক্ত করা হয়।

    {}কমান্ডের মধ্যে কেবলমাত্র একটি উদাহরণ অনুমোদিত।

আরো দেখুন:


সেখানে হয় একটি পার্থক্য এবং একটি প্রধান অন্যতম। দেখুন user1116056 এর উত্তর
জাহিদ

24

প্রদত্ত কমান্ডটি তিনটি ফাইলের নীচে নেবে:

fileA
fileB
fileC

আপনি যদি -execএকটি প্লাস ( +) চিহ্ন সহ ব্যবহার করেন ,

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

এটা হবে:

chmod 775 fileA fileB fileC

কমান্ড লাইনটি প্রতিটি মিলিত ফাইলের নামটি শেষে যুক্ত করে তৈরি করা হয় যা একইভাবে xargsএটির কমান্ড লাইনগুলি তৈরি করে। কমান্ডের মোট প্রার্থনার সংখ্যা ( chmodএই ক্ষেত্রে) ম্যাচ করা ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে।

আপনি যদি -execএকটি সেমিকোলন ( ;) ব্যবহার করেন ,

find . -type f -exec chmod 775 {} \;

এটা হবে:

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

5

অনুসারে man find:

-exec কমান্ড {} + -exec ক্রিয়নের এই রূপটি নির্বাচিত ফাইলগুলিতে নির্দিষ্ট কমান্ড চালায়, তবে প্রতিটি নির্বাচিত ফাইলের নাম শেষে অন্তর্ভুক্ত করে কমান্ড লাইনটি নির্মিত হয়; কমান্ডের অনুরোধের মোট সংখ্যা মিলিত ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে। কমান্ড লাইনটি একইভাবে নির্মিত হয়েছে যেমন xargs তার কমান্ড লাইনগুলি তৈরি করে। কমান্ডের মধ্যে '{}' কেবলমাত্র একটি উদাহরণ অনুমোদিত। কমান্ডটি শুরু ডিরেক্টরিতে কার্যকর করা হয়।

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