এই অন্য উত্তর কিছুটা ত্রুটিযুক্ত। কমান্ডটি হ'ল
find . -name '*.txt' | head -n 3
তারপরে একটি মন্তব্যে [জোর দেওয়া খনি] এর একটি ব্যাখ্যা রয়েছে :
head
শুরু হয় এবং পাইপের বাম দিক থেকে ইনপুটটির জন্য অপেক্ষা করে। তারপরে find
শুরু হয় এবং সেই ফাইলগুলির সন্ধান করে যা নির্দিষ্ট মানদণ্ডের সাথে মেলে, পাইপটির মাধ্যমে তার আউটপুট প্রেরণ করে। যখন head
অনুরোধ করা লাইনগুলির সংখ্যা প্রাপ্ত এবং মুদ্রিত হবে, তখন এটি পাইপটি বন্ধ করে শেষ করে termin find
বদ্ধ পাইপ লক্ষ্য করে এবং এটিও সমাপ্ত হয়। সহজ, মার্জিত এবং দক্ষ ।
এটি প্রায় সত্য।
সমস্যাটি কেবল find
বদ্ধ পাইপটির দিকে লক্ষ্য করার জন্য যখন এটি এটি লেখার চেষ্টা করে - এই ক্ষেত্রে যখন চতুর্থ ম্যাচটি পাওয়া যায়। তবে চতুর্থ ম্যাচ না থাকলে find
অবিরত থাকবে। আপনার শেল অপেক্ষা করবে! যদি এটি কোনও স্ক্রিপ্টে ঘটে তবে স্ক্রিপ্টটি অপেক্ষা করবে, আমরা ইতিমধ্যে জানি যে পাইপ আউটপুট চূড়ান্ত এবং এর সাথে কিছুই যুক্ত করা যায় না। এত দক্ষ নয়।
প্রভাবটি নগন্য হয় যদি এই নির্দিষ্টটি find
নিজে থেকে দ্রুত শেষ হয় তবে একটি বৃহত ফাইল ট্রিে জটিল অনুসন্ধানের সাথে কমান্ড অকারণে আপনার পরবর্তী কাজটি করতে বিলম্ব করতে পারে।
না-তাই-নিখুঁত সমাধান চালানো হয়
( find … & ) | head -n 3
এইভাবে head
প্রস্থান করার পরে, শেলটি তত্ক্ষণাত্ চলতে থাকে। পটভূমি find
প্রক্রিয়াটি তখন উপেক্ষা করা যেতে পারে (এটি শীঘ্রই বা পরে প্রস্থান করবে) বা কোনও কিছুর সাথে লক্ষ্যযুক্ত pkill
।
ধারণাটি প্রমাণ করতে আপনি অনুসন্ধান করতে পারেন /
। আমরা কেবল একটি ম্যাচ প্রত্যাশা করি, তবুও find
এটি সর্বত্র সন্ধান করে এবং এতে অনেক বেশি সময় লাগতে পারে।
find / -wholename / 2>/dev/null | head -n 1
সমস্যাটি দেখার সাথে সাথে এটি Ctrl+ দিয়ে শেষ করুন C। এখন তুলনা করুন:
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quit
কেবল প্রথম ম্যাচটি দেখান এবং প্রথম ম্যাচেরfind
পরে প্রস্থান করতে পারেন । "এন ম্যাচগুলি সন্ধানের পরে বেরিয়ে আসা" কেসটি খাপ খাইয়ে নেওয়া সম্ভব কিনা তা আমি জানি না।