উত্তর:
ওয়েল, জেনেরিক কেস যে স্ট্যান্ডআউটে লেখার জন্য যে কোনও কমান্ডের সাথে কাজ করে তা ব্যবহার করা হয় xargs
, যা আপনাকে কমান্ডের শেষের সাথে অনেকগুলি কমান্ড-লাইন যুক্তি যুক্ত করতে দেয়:
$ find … | xargs grep 'search'
বা আপনার grep
লাইনে কমান্ডটি ব্যাকটিক্স বা এম্বেড করার জন্য $()
, যা কমান্ডটি চালাবে এবং এর আউটপুটটি প্রতিস্থাপন করবে:
$ grep 'search' $(find …)
নোট করুন যে ফাইলের নামগুলিতে শ্বেত স্পেস বা কিছু অন্যান্য "অদ্ভুত অক্ষর" রয়েছে ( \'"
xargs এর \[*?
জন্য $(find …)
) যদি এই আদেশগুলি কাজ করে না ।
তবে find
প্রদত্ত যুক্তিগুলিতে কোনও প্রোগ্রাম চালানোর দক্ষতার নির্দিষ্ট ক্ষেত্রে অন্তর্নির্মিত:
$ find … -exec grep 'search' {} \;
এর মধ্যে -exec
এবং এর মধ্যেকার সমস্ত ;
কিছুই হ'ল আদেশ কার্যকর করতে; {}
দ্বারা পাওয়া ফাইলের নাম দ্বারা প্রতিস্থাপিত হয় find
। এটি grep
প্রতিটি ফাইলের জন্য পৃথক সম্পাদন করবে ; যেহেতু grep
অনেকগুলি ফাইলের নাম নিতে পারে এবং সেগুলি সন্ধান করতে পারে, তাই আপনি সমস্ত মিলে যাওয়া ফাইলের নাম একবারে পাস ;
করার +
জন্য এটি অনুসন্ধান করতে পারেন grep
:
$ find … -exec grep 'search' {} \+
find ... -type f -print0 | xargs -r0 grep 'search' /dev/null
। Qed। যদিও -exec +
খুব দক্ষ, এটি অনুসন্ধানের সমস্ত সংস্করণে বিদ্যমান নেই।
$ find … -exec grep 'search' {} \+
রূপ অনেক দ্রুততম।
কিছু সংস্করণ grep
(যেমন- এম্বেডড লিনাক্স বা বিএসডি বা ম্যাক ওএস এক্স) এর ক্ষেত্রে -r
পুনরাবৃত্ত অনুসন্ধান করতে একটি বিকল্প রয়েছে। ওপেনবিএসডি-তে, ব্যবহার করুন -R
(এবং --exclude
নীচের উদাহরণের মতো নেই)। এটি এর find
সাথে সহজ সংমিশ্রণগুলি জুড়ে grep
।
যদি আপনার বাস্তবায়নে -R
পতাকা না থাকে , বা যদি আপনি ফ্যানসিয়ার ফাইলের মিলের মানদণ্ড চান তবে আপনি এটিকে কার্যকর করার জন্য -exec
প্রাথমিকটি ব্যবহার করতে পারেন । কিছু পুরানো বাস্তবায়ন সমর্থন করে না … ; এই সিস্টেমে এর পরিবর্তে একটি ব্যবহার করুন (এটি প্রতি ফাইলের জন্য একবার কল করবে , তাই এটি ধীর হবে তবে অন্যথায় ফলাফলটি একই হবে)। কোনও একক ফাইলে ফোন করা সত্ত্বেও ফাইলটির নামটি দেখানোর কারণটি নোট করুন (জিএনইউ গ্রেপ এবং ফ্রিবিএসডি / নেটবিএসডি / ওএসএক্স গ্রেপ একই প্রভাব অর্জনের জন্য একটি বিকল্প রয়েছে)।find
grep
find
-exec
+
;
+
grep
/dev/null
grep
-H
find . -type f -name '*.o' -prune -o -exec grep 'needle' /dev/null {} +
grep -r --exclude='*.o' 'needle' .
GNU grep
-H
সর্বদা ফাইলের নাম মুদ্রণের বিকল্প রয়েছে ।