जवाबों:
आप इसके find
माध्यम से आउटपुट को पाइप कर सकते हैं head
:
find . -name '*.txt' | head -n 3
head
शुरू होता है और पाइप के बाईं ओर से इनपुट का इंतजार करता है। फिर find
शुरू होता है और उन फाइलों की खोज करता है जो निर्दिष्ट मानदंडों से मेल खाते हैं, पाइप के माध्यम से अपना आउटपुट भेजते हैं। जब head
प्राप्त और मुद्रित लाइनों की संख्या का अनुरोध किया जाता है, तो यह पाइप को बंद कर देता है। find
बंद पाइप को नोटिस करता है और यह भी समाप्त हो जाता है। सरल, सुरुचिपूर्ण और कुशल।
-n 3
है POSIX संगत है, और इसलिए संभावना अधिक पोर्टेबल होने के लिए।
यह अन्य उत्तर कुछ हद तक त्रुटिपूर्ण है। आज्ञा है
find . -name '*.txt' | head -n 3
फिर टिप्पणियों में से एक में एक स्पष्टीकरण है [जोर मेरा]:
head
शुरू होता है और पाइप के बाईं ओर से इनपुट का इंतजार करता है। फिरfind
शुरू होता है और उन फाइलों की खोज करता है जो निर्दिष्ट मानदंडों से मेल खाते हैं, पाइप के माध्यम से अपना आउटपुट भेजते हैं। जबhead
प्राप्त और मुद्रित लाइनों की संख्या का अनुरोध किया जाता है, तो यह पाइप को बंद कर देता है।find
बंद पाइप को नोटिस करता है और यह भी समाप्त हो जाता है। सरल, सुरुचिपूर्ण और कुशल ।
यह लगभग सच है।
समस्या find
केवल बंद पाइप को नोटिस करती है जब वह इसे लिखने की कोशिश करता है - इस मामले में यह तब होता है जब 4 वां मैच मिलता है। लेकिन अगर कोई 4 वां मैच नहीं है तो 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
बाद बाहर निकल सकते हैं। मुझे नहीं पता कि क्या मामला "एन मैचों को खोजने के बाद बाहर निकलने" के लिए अनुकूल होना संभव है।