এর জন্য দুটি সহজ সমাধান রয়েছে। মূলত, ব্যবহার xargs
বা parallel
।
xargs পদ্ধতির:
আপনি ব্যবহার করতে পারেন xargs
সঙ্গে find
নিম্নরূপ:
find . -type f -print0 | xargs -0 -P number_of_processes grep mypattern > output
যেখানে আপনি number_of_processes
চালু হতে চান সর্বাধিক সংখ্যক প্রক্রিয়া দ্বারা প্রতিস্থাপন করবেন । তবে আপনার পারফরম্যান্স I / O সীমাবদ্ধ হলে এটি আপনাকে একটি গুরুত্বপূর্ণ পারফরম্যান্স দেওয়ার গ্যারান্টিযুক্ত নয়। এই ক্ষেত্রে আপনি I / Os এর অপেক্ষায় থাকা সময়ের জন্য ক্ষতিপূরণ দিতে আরও প্রক্রিয়া শুরু করার চেষ্টা করতে পারেন।
এছাড়াও, অনুসন্ধানের অন্তর্ভুক্তির সাথে আপনি কেবলমাত্র ফাইলের ধরণগুলির পরিবর্তে আরও উন্নত বিকল্পগুলি নির্দিষ্টকরণের সময় ইত্যাদির মতো নির্দিষ্ট করতে পারেন ...
স্টাফেনের মন্তব্য দ্বারা ব্যাখ্যা করা এই পদ্ধতির একটি সম্ভাব্য সমস্যা, যদি খুব কম ফাইল থাকে তবে তাদের পক্ষে xargs
পর্যাপ্ত পরিমাণ প্রক্রিয়া শুরু নাও হতে পারে। একটি সমাধান পাইপ থেকে একবারে কত আর্গুমেন্ট গ্রহণ করা উচিত তা নির্দিষ্ট করার জন্য -n
বিকল্পটি ব্যবহার xargs
করা হবে। সেটিং প্রতিটি একক ফাইলের জন্য একটি নতুন প্রক্রিয়া শুরু -n1
করতে বাধ্য করবে xargs
। ফাইলগুলি যদি খুব বড় হয় (যেমন এই প্রশ্নের ক্ষেত্রে) এবং অপেক্ষাকৃত ছোট সংখ্যক ফাইল থাকে তবে এটি একটি পছন্দসই আচরণ হতে পারে। তবে, ফাইলগুলি যদি নিজেরাই ছোট হয় তবে নতুন প্রক্রিয়া শুরু করার ওভারহেড সমান্তরালতার সুবিধাটিকে হ্রাস করতে পারে, এক্ষেত্রে আরও বেশি -n
মান আরও ভাল হবে। সুতরাং, -n
ফাইল আকার এবং নম্বর অনুযায়ী বিকল্পটি ভাল সুর করা হতে পারে।
সমান্তরাল পদ্ধতি:
এটি করার আরেকটি উপায় হ'ল ওলে ট্যাঞ্জ জিএনইউ সমান্তরাল সরঞ্জামটি ব্যবহার করা parallel
( এখানে উপলভ্য )। এটি সমান্তরালতার তুলনায় বৃহত্তর সূক্ষ্ম শস্য নিয়ন্ত্রণ সরবরাহ করে এবং একাধিক হোস্টের মধ্যেও বিতরণ করা যায় (উদাহরণস্বরূপ আপনার ডিরেক্টরিটি ভাগ করা থাকলে উপকারী হবে)। সমান্তরাল ব্যবহার করে সবচেয়ে সহজ বাক্য গঠন হবে:
find . -type f | parallel -j+1 grep mypattern
বিকল্পটি -j+1
আপনার মেশিনে কোরের সংখ্যার চেয়ে বেশি পরিমাণে একটি প্রক্রিয়া শুরু করার জন্য সমান্তরালকে নির্দেশ দেয় (এটি I / O সীমিত কাজের জন্য সহায়ক হতে পারে, আপনি সংখ্যায় আরও বেশি করে যাওয়ার চেষ্টাও করতে পারেন)।
সমান্তরাল এছাড়াও xargs
প্রতিটি প্রক্রিয়া থেকে আউটপুট ক্রম বজায় রাখা এবং একটি স্বতন্ত্র আউটপুট উত্পন্ন করার সুবিধা আছে। উদাহরণস্বরূপ, এর সাথে xargs
, যদি প্রক্রিয়া 1 একটি লাইন উত্পন্ন করে বলে p1L1
, প্রক্রিয়া 2 একটি লাইন p2L1
উত্পন্ন করে, প্রক্রিয়া 1 অন্য একটি লাইন উত্পন্ন করে p1L2
, আউটপুটটি হবে:
p1L1
p2L1
p1L2
যেখানে parallel
আউটপুটটি হওয়া উচিত:
p1L1
p1L2
p2L1
এটি সাধারণত xargs
আউটপুট চেয়ে বেশি দরকারী ।