Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to match files *.R and *Rd with find utility?

Tags:

regex

find

I would like to find all files that end with .c, .R, or .Rd. I tried

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

which gives all files that end with .c or .R. How can I additionally get .Rd files as well? I know that [] only matches one character, but I couldn't adjust it to provide .Rd files as well (tried to work with | or option -regex etc.)

like image 765
Marius Hofert Avatar asked Dec 08 '12 17:12

Marius Hofert


2 Answers

Here you go =)

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

If it's just the 3 extension types that you are looking for, I'd recommend staying away from regex and just using the -o (as in "or") operator to compose your search instead.

like image 68
sampson-chen Avatar answered Nov 13 '22 11:11

sampson-chen


A suitable use of -regex would be:

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

If you want to use regular expressions you need to keep in mind that these apply to the whole path, not only to the filename:

   -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.

I agree with sampson-chen's answer, that regexes are probably not the best choice here.

like image 35
Lars Noschinski Avatar answered Nov 13 '22 12:11

Lars Noschinski