इसके लिए सही सिंटैक्स क्या है:
find . -type f -name \*.\(shtml\|css\)
यह काम करता है, लेकिन अयोग्य है:
find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt
कैसे भी करें, लेकिन कम कीस्ट्रोक्स में?
इसके लिए सही सिंटैक्स क्या है:
find . -type f -name \*.\(shtml\|css\)
यह काम करता है, लेकिन अयोग्य है:
find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt
कैसे भी करें, लेकिन कम कीस्ट्रोक्स में?
जवाबों:
आप विभिन्न खोज भावों को तार्किक संचालकों के साथ जोड़ सकते हैं -or
या -and
, इसलिए आपके मामले को लिखा जा सकता है
find . -type f \( -name "*.shtml" -or -name "*.css" \)
इससे यह भी पता चलता है कि जब आप उद्धरण का उपयोग करते हैं तो आपको विशेष शेल वर्णों से बचने की आवश्यकता नहीं होती है।
संपादित करें
चूँकि क्रिस द्वारा सुझाए गए बीच पहले वाले नाम की -or
तुलना में कम और पहले वाले पुर्ज़े में शामिल होने की तुलना में इसकी पूर्वता कम है ।-and
-type
-name
). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before
-name ' के समान है, इसके और इसके 'ऑपरेंड' के बीच नहीं)।
यहाँ अपना पहला संस्करण करने का एक तरीका है:
find -type f -regex ".*/.*\.\(shtml\|css\)"
मैं अक्सर अपने आप को और अधिक जटिल फिल्टर के लिए egrep, या लंबे समय तक पाइप, या पर्ल का उपयोग करके समाप्त होता हुआ पाता हूं:
find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'
यह कुछ हद तक कम कुशल हो सकता है लेकिन यह आमतौर पर एक चिंता का विषय नहीं है, और अधिक जटिल सामान के लिए आमतौर पर निर्माण और संशोधित करना आसान होता है।
मानक कैएट अजीब फाइलनामों (जैसे newlines) के साथ फ़ाइलों के लिए इसका उपयोग नहीं करने के बारे में लागू होता है।