मैं एक विशेष फ़ाइल प्रकार (.jpeg) के लिए दिए गए मार्ग में बहुत कुशल तरीके से खोजना चाहता हूं।
मेरे पास वर्तमान में 2 विकल्प हैं
ls- R | grep .jpeg- उपयोग
'find'
कौन सा बेहतर है? क्या कोई बेहतर तरीका है?
मैं एक विशेष फ़ाइल प्रकार (.jpeg) के लिए दिए गए मार्ग में बहुत कुशल तरीके से खोजना चाहता हूं।
मेरे पास वर्तमान में 2 विकल्प हैं
ls- R | grep .jpeg'find'कौन सा बेहतर है? क्या कोई बेहतर तरीका है?
जवाबों:
मैं का प्रयोग करेंगे find /somewhere/on/disk -name "*.jpeg"से अधिक ls।
एक locate *.jpegविकल्प भी है जो डेटाबेस का उपयोग करता है। हालाँकि, यह डेटाबेस केवल नियमित अंतराल पर (आमतौर पर cronनौकरी से) अपडेट किया जाता है, इसलिए हो सकता है कि कुछ फ़ाइल को अभी तक अनुक्रमित नहीं किया गया हो, जिस समय आप locateकमांड का आह्वान कर रहे हों, इसलिए कम सटीक परिणाम उत्पन्न हो। आप updatedbकमांड को लागू करके इस डेटाबेस के निर्माण या अद्यतन के लिए बाध्य कर सकते हैं ।
findबनाम lsप्रदर्शन के बारे में , lsआउटपुट को छांटेगा जो आपको आवश्यक नहीं है, जबकि समय लगता है। इसके अलावा, lsबहुत सारी जानकारी का उत्पादन करेगा जिसे grepबाद में फ़िल्टर करने की आवश्यकता है ।
संदर्भ:
ls -fबड़े निर्देशिकाओं पर सूची कमांड को बहुत तेज़ी से बनाने वाले आउटपुट को सॉर्ट नहीं करेगा। मैं यह नहीं कह रहा हूं कि यह findहालांकि तेजी से होगा ... मुझे नहीं पता।
मैं हमेशा खोज का प्रशंसक रहा हूं, इसके साथ आप बहुत कुछ कर सकते हैं:
खोजें / शुरू / पथ-प्रकार f -name "* .jpeg"
तो अगर मैं अपने घर निर्देशिका के तहत शुरू करना चाहता था:
/ home / john -type f -name "* .jpeg" ढूंढें
आप .jpg और .jpeg (DOS दिनों के 3 अक्षर एक्सटेंशन) की तलाश कर सकते हैं क्योंकि फाइलें या तो इस प्रकार नामित की जा सकती हैं:
खोजो। -Type f \ (-name "* .jpg" -o -name "* .jpeg" \)।
परिणाम के रूप में आप क्या चाहते हैं पर निर्भर करता है। ls -Rआपको यह नहीं बताएगा कि इसे किस डायरेक्टरी में फाइल मिली, जबकि find होगी।
इसके अलावा, ls -R अधिक आउटपुट उत्पन्न करता है, जिसे बाद में फ़िल्टर किया जाता है, जबकि findविशेष रूप से आप जो चाहते थे उसके लिए खोज करते हैं । माप किए बिना, मुझे लगता है कि find आम तौर पर अधिक कुशल होगा।
मैं आमतौर पर उपयोग करता हूं
find . -name *.jpg -print {} \;
-print?
-print?
आप चाहें तो बड़े अक्षरों में .JPG और .JPEG की फाइलों का मिलान कर सकते हैं। खोजने के साथ, आप जोड़ सकते हैं -name '*.JPG' -name '*.JPEG', या आप एक grep के लिए पाइप ढूंढ सकते हैं (हाँ, यह थोड़ा बदसूरत है):
find . -type f | grep "\.[Jj][Pp][Ee]\?[Gg]$"
यह मैच होगा:
find ./ -name *.jpg -print
*' उद्धृत किया जाना चाहिए? हो सकता है कि tommieb75 का शेल उस ओके को हैंडल करे।
"ढूंढें" या "धीमे" स्थापित करें
"अपडेट किया गया" और "पता लगाएं \"। Jpeg "चलाएँ
अपडेटब आपके सिस्टम में फ़ाइलनाम के लिए एक इंडेक्स डेटाबेस बनाता है।
निर्देशिका द्वारा निर्देशिका को स्कैन करने के बजाय डेटाबेस से फ़ाइल का पता लगाएं।
यह तेजी से होता है कि यदि आप प्रत्येक डेटाबेस के निर्माण के बाद बहुत कुछ खोज रहे हैं। आप अपडेट कमांड को चलाने के लिए क्रोन जॉब सेटअप करना चाह सकते हैं।
यह Google डेस्कटॉप खोज की तरह है, लेकिन केवल फ़ाइल नाम खोजने के लिए।
ढूँढें निश्चित रूप से इस नौकरी के लिए सबसे अच्छा साधन है।
Ls -R का आउटपुट पार्स करना मुश्किल होगा (फ़ाइल नामों को निर्देशिका नामों के साथ इंटरलेय किया गया है)। Ls के अलावा, आपको रिक्त स्थान के साथ नामों से निपटने में कठिन समय होगा, जबकि खोजें। -name '* .jpeg' -print0 null-characters द्वारा अलग की गई एक सूची उत्पन्न करेगा। xargs, grep और अन्य के पास इस तरह के इनपुट को पढ़ने का विकल्प है। इसका मतलब है कि सभी अजीब नाम संरक्षित हैं।
पाइप के साथ स्पष्ट अंतर के अलावा, दोनों संस्करणों को समान रूप से देखा जा सकता है। कार्यान्वयन ( ls.c बनाम find.c व्यस्त बॉक्स से लिया गया) फ़ाइलों की खोज करते समय काफी समान दिखता है। आप पहले वाले को भी छोटा कर सकते हैं:
ls -R *.jpeg