grep -R
( grep
ওএস / এক্স ১০.৮ এবং তারপরে প্রাপ্ত সংশোধিত জিএনইউ ব্যতীত ) সিমলিংকগুলি অনুসরণ করে, সুতরাং কেবলমাত্র 100 জিবি ফাইল থাকা ~/Documents
সত্ত্বেও, /
উদাহরণস্বরূপ একটি সিমিলিংক থাকতে পারে এবং আপনি ফাইলগুলি সহ পুরো ফাইল সিস্টেমটি স্ক্যান করে শেষ করতে পারেন even মত /dev/zero
। ব্যবহার করুন grep -r
নতুন গনুহ সঙ্গে grep
, অথবা মান সিনট্যাক্স ব্যবহার করুন:
find ~/Documents -type f -exec grep Milledgeville /dev/null {} +
(তবে দ্রষ্টব্য যে প্রস্থানটির স্থিতিটি প্যাটার্নটি মিলেছে কি না তা সত্য প্রতিফলিত করে না)।
grep
প্যাটার্নের সাথে মেলে এমন লাইনগুলি খুঁজে পায়। তার জন্য, স্মৃতিতে এটি একবারে একটি লাইন লোড করতে হয়। grep
অন্যান্য অনেকগুলি grep
বাস্তবায়নের বিপরীতে জিএনইউ বাইনারি ফাইলগুলিতে অনুসন্ধানের জন্য যে রেখাগুলি পড়ে এবং সমর্থন করে সেগুলির আকারের সীমা নেই। সুতরাং, যদি আপনি খুব বড় লাইনের (যেটি দুটি নতুন লাইন অক্ষরের সাথে খুব দূরে অ্যাপ্লিকেশন সহ) পাওয়া যায় তবে উপলব্ধ মেমরির চেয়ে বড় এটি ব্যর্থ হবে fail
এটি সাধারণত একটি বিরল ফাইলের সাথে ঘটে। আপনি এটি দিয়ে পুনরুত্পাদন করতে পারেন:
truncate -s200G some-file
grep foo some-file
যে চারপাশে কাজ করা কঠিন। আপনি এটি হিসাবে এখনও করতে পারেন (এখনও জিএনইউ সহ grep
):
find ~/Documents -type f -exec sh -c 'for i do
tr -s "\0" "\n" < "$i" | grep --label="$i" -He "$0"
done' Milledgeville {} +
এটি ইনপুট খাওয়ানোর আগে NUL টি অক্ষরের ক্রমকে একটি নতুন লাইন চরিত্রে রূপান্তর করে grep
। স্পার্স ফাইলগুলির কারণে সমস্যাটি এমন ক্ষেত্রে কাভার করবে।
আপনি কেবলমাত্র বড় ফাইলগুলির জন্য এটি করে এটি অনুকূলিত করতে পারেন:
find ~/Documents -type f \( -size -100M -exec \
grep -He Milledgeville {} + -o -exec sh -c 'for i do
tr -s "\0" "\n" < "$i" | grep --label="$i" -He "$0"
done' Milledgeville {} + \)
যদি ফাইলগুলি অপ্রয়োজনীয় না হয় এবং আপনার grep
আগে GNU এর একটি সংস্করণ থাকে তবে 2.6
আপনি --mmap
বিকল্পটি ব্যবহার করতে পারেন । লাইনগুলি সেখানে অনুলিপি করার বিপরীতে মেমরিতে ম্যাপ করা হবে যার অর্থ সিস্টেম সর্বদা ফাইলে পৃষ্ঠাগুলি প্রেরণ করে মেমরিটিকে পুনরায় দাবি করতে পারে। এই বিকল্পটি জিএনইউ grep
২.6-এ সরানো হয়েছে