2012-12-08 8 views
9

मैं .c, .R, या .Rd के साथ समाप्त होने वाली सभी फ़ाइलों को ढूंढना चाहता हूं। मैंने कोशिश कीयूनिक्स ढूंढें: फ़ाइलों से कैसे मिलान करें * आर और * आरडी?

find . -iname "*.[cR]" -print 

जो सभी फ़ाइलें .c या .R के साथ समाप्त कर देता है। मैं अतिरिक्त रूप से .Rd फ़ाइलों को कैसे प्राप्त कर सकता हूं? मुझे पता है कि [] केवल एक ही अक्षर से मेल खाता है, लेकिन मैं के रूप में अच्छी .Rd फ़ाइलें प्रदान करने के लिए इसे समायोजित नहीं कर सकता

उत्तर

15

यहां आपको =)

find -name "*.c" -o -name "*.R" -o -name "*.Rd" 

(| या विकल्प -regex आदि के साथ काम करने की कोशिश की) यदि यह केवल 3 एक्सटेंशन प्रकार हैं जिन्हें आप ढूंढ रहे हैं, तो मैं आपकी खोज लिखने के लिए -o (जैसा कि "या") ऑपरेटर के रूप में उपयोग कर रहा हूं, बस रेगेक्स से दूर रहने की सलाह दूंगा।

+0

यह समाधान प्लेटफॉर्म पर निर्भर प्रतीत होता है: मैंने अपने विंडोज पीसी पर एक सिग्विन यूनिक्स एमुलेटर स्थापित किया है, और निम्न खोज कमांड काम कर रहा है: 'find ./ -name" * .exe "' और 'find ./ -नाम "* .dll" 'लेकिन' find ./ -name "* .exe" -o name "* .dll" 'काम नहीं करता है। – Dominique

7

-regex का एक उपयुक्त उपयोग होगा:

find -regex '.*\.\(R\|Rd\|c\)' 

आप नियमित अभिव्यक्ति आप को ध्यान में रखना है कि इन न केवल फ़ाइल नाम के लिए, पूरे रास्ते के लिए लागू की जरूरत उपयोग करना चाहते हैं:

-regex pattern 
      File name matches regular expression pattern. This is a match 
      on the whole path, not a search. For example, to match a file 
      named `./fubar3', you can use the regular expression `.*bar.' or 
      `.*b.*3', but not `f.*r3'. The regular expressions understood 
      by find are by default Emacs Regular Expressions, but this can 
      be changed with the -regextype option. 

मैं सैम्पसन-चेन के उत्तर से सहमत हूं, कि रेगेक्स शायद यहां सबसे अच्छा विकल्प नहीं है।

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