वहाँ `find` गति बढ़ाने के लिए एक रास्ता है


15

मुझे आश्चर्य है कि findटर्मिनल में गति बढ़ाने का एक तरीका है , यह समझ में नहीं आता है कि इंटरनेट का उपयोग करके खोज करने के लिए स्ट्रिंग्स या सिर्फ फ़ाइल नामों के लिए स्थानीय खोज करने से बेहतर गति होगी।

मैं सोच रहा हूं कि भविष्य में एक बार स्थानीय अनुक्रमण आधार बनाने का एक तरीका है, खोज कमांड सुपर फास्ट हो सकती है।

या कोई और सुझाव?

धन्यवाद!


क्या आप अपनी पोस्ट को अपने ऑपरेटिंग सिस्टम और / या वितरण के साथ संपादित कर सकते हैं?
जोड़ी सी

जवाबों:


15

उपयोग करने का प्रयास करें locate, यह वह करना चाहिए जो आप चाहते हैं।


13
इसका आमतौर पर एक अच्छा विचार है कि उत्तर को थोड़ा और अधिक मांस दें। जैसे कि किस पैकेज locate(आमतौर पर slocate) से आता है , और updatedbडीबी के पुनर्निर्माण के लिए उपयोग करना। :-)
पैट्रिक

1
यह अनुक्रमण के साथ विभाजन के लिए काम नहीं करता है। उदाहरण के लिए, यदि अनुक्रमण सक्षम किया गया है, तो NTFS विभाजन खराब प्रदर्शन से ग्रस्त हैं, इस प्रकार "उन लोगों के लिए काम नहीं करेंगे जो इसे करना चाहिए"।
ओज्रस्क 6

9

यह बहुत कुछ इस बात पर निर्भर करता है कि आपकी खोज की कसौटी क्या है।

यदि आप फ़ाइल नाम या फ़ाइल नाम पैटर्न की खोज करते हैं, तो पता लगाना बहुत तेज़ है, लेकिन ताज़ा जेनरेट की गई फ़ाइलों के लिए उपयुक्त नहीं है, क्योंकि आमतौर पर उपयोग किए जाने वाले इंडेक्स को प्रति दिन केवल एक बार अपडेट किया जाता है। लेकिन अगर आप इसका इस्तेमाल कर सकते हैं, तो यह सुपर फास्ट है।

लेकिन खोजने के साथ आप फ़ाइल आकार, फ़ाइल आयु और अन्य चीजों की खोज कर सकते हैं, जो कि पता लगाने योग्य नहीं हैं।

यदि आप जानते हैं कि कहां खोज करनी है, तो आप खोज क्षेत्र को परिसीमित करने के लिए पथ का उपयोग कर सकते हैं :

find /some/path -size -10M -size +2M -mtime -365 ...

केवल 2 से 10 M, अधिकतम 1 वर्ष / कुछ / पथ में फ़ाइलें खोजेंगे।

पथ में उपलब्ध प्रोग्रामों को खोजा जा सकता है जिसके द्वारा, सहायता, लिबास और विन्यास फाइल के साथ। उदाहरण:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

उपयोग locate

कारण यह है कि locateसभी मौजूदा निर्देशिकाओं और फ़ाइलों का एक डेटाबेस का उपयोग करता है जो पहले से ही आपकी कल्पना की तरह ही बनाया गया है !
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

कुछ सेट (और परिवर्तनशील) अंतराल पर, एक नौकरी चलती है जो फ़ाइल सिस्टम को स्कैन करती है और फिर इसके साथ एक डेटाबेस बनाती है। यह तब यह डेटाबेस (स्थित) है, इसके उचित अनुक्रमित के साथ कि locateकमांड उस बिंदु पर आपकी हार्ड ड्राइव के माध्यम से स्कैन करने के बजाय जाता है।

तो उल्टा यह है कि यह एक हार्ड ड्राइव स्कैन की तुलना में बहुत तेज है। नकारात्मक पक्ष यह है कि पता लगाने वाला डेटाबेस (स्थित) 'लाइव' नहीं है, इसलिए इसका उपयोग केवल उन फाइलों के लिए किया जा सकता है जो 'अंतिम स्कैन' के रूप में मौजूद थीं।

अब स्थित अपडेट को चलाने के लिए updatedb(या sudo updatedbयदि आवश्यक हो)

btw मैं सिर्फ sudo updatedbस्थानीय रूप से भाग गया और इसमें 3 1/2 सेकंड का समय लगा! मेरे पास 31,000 फाइलें हैं।


1

जैसा कि दूसरों ने बताया है, सरल खोजकर्ता के लिए एक बेहतर उपकरण हो सकता है।

हालाँकि, अधिक जटिल खोजों के लिए आप संभवतः खोज के साथ फंस गए हैं।

खोज को गति देने का एक तरीका यह है कि आपकी निर्देशिका को सभी रूट डायरेक्टरी में खोजने के बजाय किस डायरेक्टरी में संकीर्ण किया जाए।


0

एक खोज अभियान के लिए; मुझे कोई स्पीडअप नहीं मिला; जब तक findविकल्पों का उपयोग करके खोज को कम करने की कोशिश नहीं की जाती ।

तथापि; यदि आप फ़ाइलों के एक ही सेट पर कई findऑपरेशन करना चाहते हैं ; मुझे सभी फ़ाइलनामों और उपयोग के साथ एक अस्थायी फ़ाइल पॉप्युलेट करने वाला एक महत्वपूर्ण स्पीडअप मिला grep। बेशक, यह उन फ़ाइलों को ध्यान में नहीं रखता है जिन्हें जोड़ा या हटाया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.