'Find} +' এ 'অনুসন্ধান-এক্সেক সেন্টিমিটার {} +' কেন শেষ হওয়া দরকার?


11

ভূমিকা: আমি -exec {} \;& এর মধ্যে পার্থক্য বুঝতে পারি -exec {} +। আমারও এর মতো সমস্যা নেই , আমি এর শব্দার্থ সম্পর্কে শুধু কৌতূহলী find


পরিবর্তে -execযুক্তি শেষ +করার সময় ;, আমাদের এটি দিয়ে শেষ করা দরকার{} + , উদাহরণস্বরূপ:

# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"

# GNU find is even more cryptic:
$ find: missing argument to `-exec'

;এই উদাহরণগুলিতে ব্যবহার না +করে ভাল কাজ করে (তবে স্পষ্টতই অন্য কিছু করে)।

পসিক্স থেকে :

-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +

... কেবলমাত্র একটি <plus-sign> যা তাত্ক্ষণিকভাবে কেবলমাত্র দুটি অক্ষর সমন্বিত একটি আর্গুমেন্ট অনুসরণ {}করে প্রাথমিক এক্সপ্রেশনটির শেষেকে বিরামচিহ্ন করে। <প্লাস-সাইন> এর অন্যান্য ব্যবহারগুলি বিশেষ হিসাবে বিবেচিত হবে না।

অন্য কথায়, যখন ব্যবহার +, কমান্ড প্রয়োজন সঙ্গে যুদ্ধে প্রতি {} +

কেন? এবং কেন শুধুমাত্র সাথে +এবং না ;? প্রথমে আমি ভেবেছিলাম সম্ভবত ফাইল নামগুলির সাথে দ্বন্দ্ব এড়াতে একটি +, তবে ফাইলের নামগুলি ;ভাল কাজ করে বলে মনে হচ্ছে? এই সীমাবদ্ধতাটি নির্বিচারে বিশ্বাস করা আমার পক্ষে কঠিন ...


3
The "-exec ... {} +" syntax adopted was a result of IEEE PASC Interpretation 1003.2 #210Note that the "+" is only treated as special if it immediately follows "{}". This minimises the chances of causing problems with existing uses of "+" as an argument with "-exec".
এফডব্লিউআইডাব্লু

উত্তর:


5

যুক্তিপূর্ণ POSIX স্পেসিফিকেশন দেওয়া হল:

"-exec ... {} +"সিনট্যাক্স গৃহীত আইইইই PASC ব্যাখ্যা 1003.2 # 210 ফলে ছিল। এটি লক্ষ করা উচিত যে এটি আইএসও / আইসিসি 9899: 1999 স্ট্যান্ডার্ডের সাথে একটি বেমানান পরিবর্তন। উদাহরণস্বরূপ, নীচের কমান্ডটি '-'নিয়মিত ফাইল হলে তাদের নামের পরে সমস্ত ফাইল মুদ্রণ করে এবং '+'অন্যথায়:

find / -type f -exec echo {} - ';' -o -exec echo {} + ';'

পরিবর্তন এই জাতীয় ব্যবহারকে অবৈধ করে তোলে। যদিও পূর্ববর্তী মানটি বলেছিল যে এই ব্যবহারটি কার্যকর হবে, বাস্তবে অনেকেই এটি সমর্থন করেনি এবং মান বিকাশকারীরা এখন এটি আরও ভাল বলে মনে করেছেন যে এটি অনুমোদিত নয়।

পিএএসসি ব্যাখ্যার 1003.2 # 210 এর ইতিহাস সম্পর্কে আরও বিশদে যায় -exec … {} +। এটি পসিক্স দ্বারা গৃহীত হওয়ার আগে এটি বেশ কয়েকটি ইউনিক্স সিস্টেমে বিদ্যমান ছিল; ত্রুটিযুক্ত প্রতিবেদনটি এটিকে এসভিআর 4-তে ফিরে পেয়েছে (যেখানে এটি বেশিরভাগ ক্ষেত্রে অননুমোদিত ছিল)। ত্রুটি প্রতিবেদনটি অনুশীলনে সামান্য প্রভাব ফেলেছে বলে বেমানান পরিবর্তনকে ন্যায্যতা দেয়:

নোট করুন যে "+" কেবল তখনই বিশেষ হিসাবে বিবেচিত হবে যদি তা অবিলম্বে "{}" অনুসরণ করে। এটি "-exec" এর সাথে যুক্তি হিসাবে "+" এর বিদ্যমান ব্যবহারগুলিতে সমস্যা হওয়ার সম্ভাবনা হ্রাস করে।

যদিও -exec … {} +উপরের উদাহরণের মতো কিছু উপযুক্ত অ্যাপ্লিকেশনকে সমর্থন হিসাবে সমর্থন যোগ করা গেলেও -exec … {} … +অনুমতি দেওয়া হয়েছে এর চেয়ে এর কম রয়েছে ।

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

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