2012-12-08 7 views
9

Chciałbym znaleźć wszystkie pliki, które kończą się .c, .R lub .Rd. PróbowałemUnix znaleźć: Jak dopasować pliki * .R i * Rd?

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

który daje wszystkie pliki, które kończą się .c lub .R. W jaki sposób mogę dodatkowo uzyskać pliki .Rd? Wiem, że [] pasuje tylko jeden znak, ale nie mogłem dopasować go do zapewnienia .Rd plików, jak również (starał się współpracować z | lub opcji -regex etc.)

Odpowiedz

15

Tu go =)

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

Jeśli są to tylko 3 typy rozszerzeń, których szukasz, zalecam trzymanie się z dala od regex i po prostu używanie operatora -o (jak w "lub"), aby skomponować wyszukiwanie.

+0

To rozwiązanie wydaje się być zależne od platformy: zainstalowałem emulator Cygwin UNIX na moim komputerze z systemem Windows, a następujące polecenie wydaje się działać: 'find ./ -name" * .exe "' and 'find ./ -name "* .dll" 'ale' find ./ -name "* .exe" -o nazwa "* .dll" 'wydaje się nie działać. – Dominique

7

Odpowiednie wykorzystanie -regex byłoby:

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

Jeśli chcesz użyć wyrażeń regularnych musisz pamiętać, że to odnosi się do całej drogi, a nie tylko do nazwy pliku:

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

Zgadzam się z odpowiedzią sampsona-chena, że ​​wyroki prawdopodobnie nie są najlepszym wyborem.

Powiązane problemy