Как сопоставить файлы *.R и * Rd с помощью утилиты find?

Мне бы хотелось найти все файлы, которые заканчиваются на .c, .R или .Rd. Я попробовал

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

который дает все файлы, заканчивающиеся на .c или .R. Как я могу дополнительно получить файлы .Rd? Я знаю, что [] соответствует только одному символу, но я не мог настроить его для создания файлов .Rd (пытался работать с | или опцией -regex и т.д.)

Ответ 1

Здесь вы идете =)

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

Если это всего лишь 3 типа расширений, которые вы ищете, я бы рекомендовал избегать регулярных выражений и просто использовать оператор -o (как в случае "или" ) для составления вашего поиска.

Ответ 2

Подходящее использование -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.

Я согласен с ответом sampson-chen, что regexes, вероятно, не лучший выбор здесь.