सभी स्रोत फ़ाइलों (* .c, * .cpp, * .h) को कैसे सूचीबद्ध करें


15

मुझे श्रोत फाइल्स (* .c, * .cpp, * .h) मिलनी चाहिए जो कि लिनक्स / मिनग्व / साइगविन में होती हैं, और सभी उप निर्देशिकाओं में पुनरावर्ती होती हैं।

मेरा मूल विचार उपयोग कर रहा है findऔर grep। हालाँकि, एक नियमित अभिव्यक्ति का निर्माण जो दिए गए फ़ाइल नाम की जाँच कर सकता है, * .c, * .cpp, या * .h आसान नहीं है। क्या आप मेरी मदद कर पाएंगे?

जवाबों:



5
find -regex '.*/.*\.\(c\|cpp\|h\)$'

$कमांड के अंत में क्या करता है?
अली

2
@ अलि: यह लाइन के अंत में रेग्क्स को लंगर डालता है (यह foo.cpp.oldउदाहरण के लिए नामित फ़ाइलों को खोजने से रोकता है )।
अगली सूचना तक रोक दिया गया।

1

मै इस्तेमाल करूंगा:

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

1
मेरी मैकबुक में, बिना स्क्रिप्ट के -Eकुछ भी नहीं मिल सकता है। आपको इसे और अधिक पोर्टेबल बनाने के लिए एक -E (जैसे विस्तारित) जोड़ने की आवश्यकता हो सकती है, ठीक उसी तरह find -E . -regex '.*\.(c|h|cpp)' -print। ;-)
पंबदा

1

त्वरित और गंदे, और निर्देशिका नामों से बचा जाता है:

find . -type f -name *.[c\|h]

2
इस कमांड के साथ तीन समस्याएं हैं: 1. यह *.cppफाइलें नहीं ढूंढेगा। 2. यह *.|फ़ाइलें मिल जाएगा । 3. अगर मौजूदा डायरेक्टरी में मैचिंग फाइल्स हैं तो ग्लोब का विस्तार होगा। उद्धृत करना रोकता है।
डेनिस


0

मैं एक का उपयोग करें MAC Pro जो भी काम में आता है। लेकिन हर बार मैं कमांड लाइन में टाइप करता हूं:

find -name

यह अवैध विकल्प कहता है। इसलिए मैंने इसे सरल बनाया:

find *.c *.cpp *.h

और यह वास्तव में काम किया पाया!

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