Как сопоставить файлы *.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, вероятно, не лучший выбор здесь.