2008-11-10 16 views
20

मुझे पता है कि सभी एच फाइलों को खोजने के लिए मुझे उपयोग करने की आवश्यकता है: खोजें। -नाम "* .h" लेकिन सभी एच और सीपीपी फ़ाइलों को कैसे ढूंढें?सभी सीपीपी और एच फाइलों को खोजने के लिए यूनिक्स "ढूंढें" कमांड का उपयोग कैसे करें?

+0

[यूनिक्स ढूंढें: एकाधिक फ़ाइल प्रकार] का संभावित डुप्लिकेट (https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types) –

उत्तर

35
find . -name \*.h -print -o -name \*.cpp -print 

या

find . \(-name \*.h -o -name \*.cpp \) -print 
+0

पिछले कुछ वर्षों में 'ढूंढ' के साथ कुछ बदल गया है वर्षों? मैं इसे उबंटू 9 .10 या ओएस एक्स 10.6 में काम करने के लिए नहीं मिल सकता। यह '.cpp' फ़ाइलों को पाता है लेकिन '.h' फ़ाइलों को नहीं। उदाहरण: https://gist.github.com/783687 – Nate

+1

'ढूंढें' आज़माएं। -नाम \ *। h -print -o -name \ *। cpp -print' –

+0

यह काम करता है। धन्यवाद। – Nate

9
find -name "*.h" -or -name "*.cpp" 

+0

यह केवल उन फ़ाइलों को लौटाता है जिनके नाम बिल्कुल '.h' या '.cpp' हैं। वांछित के रूप में काम करने के लिए एक वाइल्डकार्ड की आवश्यकता होती है: खोज-नाम "* .h" -or -name "* .cpp" – lmop

+4

'-or' एक जीएनयूज्म है। लेकिन '-o' मानक (POSIX) है। – Jens

6

Paul Tomblin पहले से ही एक भयानक जवाब प्रदान की गई है (तारांकन जो स्वरूपण के रूप में व्याख्या कर रहे थे की रक्षा के लिए संपादित), लेकिन मैंने सोचा कि मैं में एक पैटर्न देखा तुम क्या कर रहे थे।

संभावना है कि आप एक फ़ाइल सूची एक दिन ग्रेप साथ कार्रवाई करने के लिए उत्पन्न करने के लिए लगता है का उपयोग किया जाएगा रहे हैं, और इस तरह के कार्य के लिए एक और अधिक उपयोगकर्ता के अनुकूल उपकरण वहां मौजूद, किसी भी प्रणाली पर्ल का समर्थन करता है कि पर Ack

काम करता है, और किसी दिए गए स्ट्रिंग के लिए रिकर्सिवली एक निर्देशिका में सभी सी ++ संबंधित फ़ाइलें के माध्यम से खोज के रूप में सरल रूप में

ack "int\s+foo" --cpp 

"--cpp" डिफ़ॉल्ट रूप से .cpp .cc .cxx .m .hpp .hh .h .hxx फ़ाइलों

से मेल खाता है यह भी है (डिफ़ॉल्ट रूप से भंडार dirs छोड़ देता है तो अभ्यस्त फ़ाइलों कि उन में फ़ाइलों की तरह लग रहे करने के लिए होता है पर मेल खाते हैं।)

2
find . -regex ".*\.[cChH]\(pp\)?" -print 

यह cygwin में मेरे लिए ठीक परीक्षण किया गया।

+0

वह एक्सटेंशन 'सी',' सीपीपी ',' एचपीपी 'वाली फाइलें भी पायेगा, जो या तो सीपीपी फाइल नहीं हैं, न ही सामान्य एक्सटेंशन हैं।साथ ही, आप अंतिम बिंदु से ठीक से बच नहीं पाए, जिसका अर्थ है कि आप नाम की फाइलें भी गणित करेंगे। 'xcpp' या' सी'। आपने नियमित अभिव्यक्तियों को महारत हासिल करके और सही तरीके से खोज न करके कई समस्याएं पेश की हैं। –

+0

@Lyle, आपका आदेश linux पर काम नहीं करता है :( – hugemeow

2

आप इस छोटे से रूप में find उपयोग कर सकते हैं:

find \(-name '*.cpp' -o -name '*.h' \) -print 

-print छोड़ा जा सकता है। अभिव्यक्तियों के बीच -o का उपयोग करना विशेष रूप से तब उपयोगी होता है जब आप कई प्रकार की फाइलें ढूंढना चाहते हैं और एक ही काम करते हैं (मान लें कि md5sum की गणना करें)।

2

एक छोटी, स्पष्ट find साथ यह करने के लिए तरीका है:

find . -regex '.*\.\(cpp\|h\)' 

-regex के लिए आदमी पृष्ठ से: "यह पूरे रास्ते, नहीं एक खोज पर एक मैच है।" इसलिए फ़ाइल नाम से पहले ./dir1/dir2/... पथ की शुरुआत से मेल खाने के लिए .* के साथ उपसर्ग करने की आवश्यकता है।

संबंधित मुद्दे

 संबंधित मुद्दे