সহ find
:
cd /the/dir
find . -type f -exec grep pattern {} +
( -type f
কেবলমাত্র নিয়মিত ফাইলগুলিতে সন্ধান করা ( নিয়মিত ফাইলগুলিতে ইঙ্গিত করলেও সিমলিংক বাদেও)) আপনি যদি ডিরেক্টরি বাদে কোনও প্রকারের ফাইলে অনুসন্ধান করতে চান তবে (তবে সাবধান থাকুন যে ফিফোস বা / দেব / শূন্যের মতো কিছু ধরণের ফাইল রয়েছে যা আপনি সাধারণত পড়তে চান না), -type f
GNU- নির্দিষ্ট ! -xtype d
( সিমলিংক রেজোলিউশনের পরে -xtype d
টাইপ ডিরেক্টরি ফাইলগুলির সাথে মেলে ) দিয়ে প্রতিস্থাপন করুন )।
জিএনইউ সহ grep
:
grep -r pattern /the/dir
(তবে সাবধান থাকুন যে আপনি জিএনইউ গ্রেপের সাম্প্রতিক সংস্করণ না থাকলে, ডিরেক্টরিতে নামার সময় এই চিহ্নগুলি অনুসরণ করবে)। আপনি কোনও -D read
বিকল্প যোগ না করা অবধি নিয়মিত ফাইলগুলি অনুসন্ধান করা হবে না । GNU- র সাম্প্রতিক সংস্করণগুলি grep
এখনও সিমলিংকের ভিতরে অনুসন্ধান করবে না।
জিএনইউর খুব পুরানো সংস্করণ find
মানক {} +
সিনট্যাক্স সমর্থন করে না , তবে সেখানে আপনি অ-মানক ব্যবহার করতে পারেন:
cd /the/dir &&
find . -type f -print0 | xargs -r0 grep pattern
পারফরম্যান্সগুলি I / O সীমাবদ্ধ হতে পারে। অনুসন্ধানের সময় সেই সময়টি স্টোরেজ থেকে সমস্ত ডেটা পড়ার প্রয়োজন হয়।
যদি ডেটাটি রিডানডান্ট ডিস্ক অ্যারেতে থাকে তবে এক সাথে বেশ কয়েকটি ফাইল পড়লে কর্মক্ষমতা উন্নত হয় (এবং অন্যথায় সেগুলি হ্রাস করতে পারে)। পারফরম্যান্সগুলি যদি আই / ও বাউন্ডেড না হয় (কারণ উদাহরণস্বরূপ সমস্ত ডেটা ক্যাশে রয়েছে), এবং আপনার একাধিক সিপিইউ রয়েছে, সমবর্তী greps
পাশাপাশি সহায়তা করতে পারে। আপনি এটি GNU xargs
এর -P
বিকল্পের সাহায্যে করতে পারেন ।
উদাহরণস্বরূপ, যদি ডেটা 3 ড্রাইভের সাথে একটি RAID1 অ্যারে থাকে, বা যদি ডেটা ক্যাশে থাকে এবং আপনার কাছে 3 টি সিপিইউ রয়েছে যার সময়সীমা বেঁধে দেওয়ার:
cd /the/dir &&
find . -type f -print0 | xargs -n1000 -r0P3 grep pattern
(এখানে প্রতি 1000 ফাইলগুলিতে -n1000
একটি নতুন নতুন স্প্যান ব্যবহার grep
করে একসাথে 3 টি পর্যন্ত সমান্তরালে চলমান)।
তবে মনে রাখবেন যে যদি আউটপুটটিকে grep
পুনঃনির্দেশিত করা হয় তবে আপনি 3 টি grep
প্রক্রিয়া থেকে খারাপভাবে আন্তঃবিবাহিত আউটপুটটি শেষ করবেন , সেক্ষেত্রে আপনি এটিকে এটি চালাতে চান:
find . -type f -print0 | stdbuf -oL xargs -n1000 -r0P3 grep pattern
(সাম্প্রতিক জিএনইউ বা ফ্রিবিএসডি সিস্টেমে) বা --line-buffered
জিএনইউ বিকল্পটি ব্যবহার করুন grep
।
যদি pattern
একটি স্থির স্ট্রিং থাকে তবে -F
বিকল্পটি যুক্ত করা বিষয়গুলির উন্নতি করতে পারে।
যদি এটি মাল্টি-বাইট চরিত্রের ডেটা না হয়, বা যদি সেই প্যাটার্নটির মিলের জন্য, তবে ডেটা মাল্টি-বাইট চরিত্র কিনা তা বিবেচনা করে না, তবে:
cd /the/dir &&
LC_ALL=C grep -r pattern .
পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নতি করতে পারে।
যদি আপনি প্রায়শই এই জাতীয় অনুসন্ধানগুলি শেষ করেন, তবে আপনি সেখানে অনেকগুলি অনুসন্ধান ইঞ্জিন ব্যবহার করে আপনার ডেটা সূচী করতে চাইতে পারেন want
find
সাথে ব্যবহার করুনxargs
grep -R