রেকর্ডের জন্য, আমি যে পছন্দটিকে পছন্দ করি তা এখানে:
grep pattern $(find . -type f ! -path './test/main.cpp')
grep
কমান্ডের শুরুতে রেখে , আমি মনে করি এটি কিছুটা স্পষ্ট - প্লাস এটি grep
রঙিন হাইলাইটিং অক্ষম করে না । এক অর্থে, find
কমান্ড-প্রতিস্থাপনে ব্যবহার করা grep
এর কার্যকারিতাটির (সীমাবদ্ধ) ফাইল-সন্ধানের উপসেটটি বাড়ানো / প্রতিস্থাপনের এক উপায় ।
আমার কাছে find -exec
সিনট্যাক্স এক ধরণের আরকেন। এর মধ্যে একটি জটিলতা find -exec
হ'ল (কখনও কখনও) বিভিন্ন চরিত্রের পালানোর প্রয়োজন (বিশেষত যদি \;
বাশের অধীনে ব্যবহৃত হয়)। জিনিসগুলিকে পরিচিত প্রসঙ্গে রেখে দেওয়ার উদ্দেশ্যে, নিম্নলিখিত দুটি কমান্ড মূলত সমতুল্য:
find . ! -path ./test/main.cpp -type f -exec grep pattern {} +
find . ! -path ./test/main.cpp -type f -print0 |xargs -0 grep pattern
আপনি যদি সাব-ডিরেক্টরিগুলি বাদ দিতে চান তবে একটি ওয়াইল্ডকার্ড ব্যবহার করা প্রয়োজন হতে পারে। আমি এখানে স্কিমাটি পুরোপুরি বুঝতে পারি না - আরকেন সম্পর্কে কথা বলি :
grep pattern $(find . -type f ! -path './test/main.cpp' ! -path './lib/*' )
স্ক্রিপ্টগুলিতে ব্যবহারের জন্যfind
ভিত্তিক সমাধানগুলি সাধারণকরণের জন্য আরও একটি নোট : grep
কমান্ড-লাইনে -H
/ --with-filename
বিকল্পটি অন্তর্ভুক্ত করা উচিত । অন্যথায় এটি এই পরিস্থিতিতে আউটপুট ফর্ম্যাটিকে পরিবর্তন করবে যে সন্ধানের ফলাফলগুলিতে কেবলমাত্র একটি ফাইলের নাম থাকতে পারে find
। এটি উল্লেখযোগ্য কারণ এটি যদি প্রয়োজনীয় হয় না তবে এটির প্রয়োজনীয় grep
ফাইল-সন্ধান ( -r
বিকল্পের সাথে) ব্যবহার করে।
... আরও ভাল, যদিও /dev/null
অনুসন্ধানের জন্য প্রথম ফাইল হিসাবে অন্তর্ভুক্ত করা উচিত। এটি দুটি সমস্যার সমাধান করে:
- এটি সুনিশ্চিত করে যে অনুসন্ধানের জন্য যদি একটি ফাইল থাকে, তবে সেখানে
grep
দুটি আছে এবং একাধিক-ফাইল আউটপুট মোড ব্যবহার করবে will
- এটি সুনিশ্চিত করে যে যদি অনুসন্ধানের জন্য কোনও ফাইল না থাকে তবে তারা
grep
মনে করবে যে সেখানে একটি ফাইল আছে এবং স্টিডিনের জন্য অপেক্ষা না করে।
সুতরাং চূড়ান্ত উত্তরটি হ'ল:
grep pattern /dev/null $(find . -type f ! -path './test/main.cpp')
--exclude-dir
) বাদ দিতে চাইলে সমস্যাটি বড় হয়ে যায় । এজন্য আমি গ্রিপকে দেশীয়ভাবে বাদ দেওয়ার চেষ্টা করতে চাই।