एकाधिक एक्सटेंशन द्वारा फ़िल्टर की गई फ़ाइलें खोजें


52

इसके लिए सही सिंटैक्स क्या है:

find . -type f -name \*.\(shtml\|css\)

यह काम करता है, लेकिन अयोग्य है:

find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt

कैसे भी करें, लेकिन कम कीस्ट्रोक्स में?

जवाबों:


75

आप विभिन्न खोज भावों को तार्किक संचालकों के साथ जोड़ सकते हैं -orया -and, इसलिए आपके मामले को लिखा जा सकता है

find . -type f \( -name "*.shtml" -or -name "*.css" \)

इससे यह भी पता चलता है कि जब आप उद्धरण का उपयोग करते हैं तो आपको विशेष शेल वर्णों से बचने की आवश्यकता नहीं होती है।

संपादित करें

चूँकि क्रिस द्वारा सुझाए गए बीच पहले वाले नाम की -orतुलना में कम और पहले वाले पुर्ज़े में शामिल होने की तुलना में इसकी पूर्वता कम है ।-and-type-name


यह भी "* .css" नाम की निर्देशिकाओं को प्रिंट करेगा।
टेडी

हम्म, आपके अद्यतन संस्करण में कोष्ठक थोड़े गलत हैं। अलग-अलग कोष्ठक को खोजने के लिए अलग-अलग मापदंडों के रूप में समाप्त होने की आवश्यकता होती है , इसलिए उन्हें अपने चारों ओर रिक्त स्थान (`" .css ")` एक एकल स्ट्रिंग मान में परिणाम चाहिए; यह (जैसे) `' .css' ' ). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before -name ' के समान है, इसके और इसके 'ऑपरेंड' के बीच नहीं)।
क्रिस जॉन्सन


12

आपको केवल फाइलों को समाहित करने की आवश्यकता है:

find . -type f \( -name "*.shtml" -o -name "*.css" \) -print

बोनस : यह POSIX- आज्ञाकारी वाक्यविन्यास है।


4

मैं अक्सर अपने आप को और अधिक जटिल फिल्टर के लिए egrep, या लंबे समय तक पाइप, या पर्ल का उपयोग करके समाप्त होता हुआ पाता हूं:

find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'

यह कुछ हद तक कम कुशल हो सकता है लेकिन यह आमतौर पर एक चिंता का विषय नहीं है, और अधिक जटिल सामान के लिए आमतौर पर निर्माण और संशोधित करना आसान होता है।

मानक कैएट अजीब फाइलनामों (जैसे newlines) के साथ फ़ाइलों के लिए इसका उपयोग नहीं करने के बारे में लागू होता है।


स्वच्छ और मॉड्यूलर समाधान के लिए +1, खोज परिणामों से उत्पन्न फ़ाइलों को संसाधित करते समय आमतौर पर प्रदर्शन में बाधा उत्पन्न होती है।
क्रिस्चियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.