Wiem, że aby znaleźć wszystkie pliki h, których potrzebuję użyć: znajdź. -name "* .h" ale jak znaleźć wszystkie pliki h i cpp?jak użyć polecenia "find" unix, aby znaleźć wszystkie pliki cpp i h?
Odpowiedz
find . -name \*.h -print -o -name \*.cpp -print
lub
find . \(-name \*.h -o -name \*.cpp \) -print
Czy coś zmieniło się z 'find' w ciągu ostatnich kilku lat? Nie mogę uruchomić tego w Ubuntu 9.10 lub OS X 10.6. Znajduje pliki '.cpp', ale nie pliki' .h'. Przykład: https://gist.github.com/783687 – Nate
Spróbuj 'find. -name \ *. h -print -o -name \ *. cpp -print' –
To działa. Dzięki. – Nate
find -name "*.h" -or -name "*.cpp"
(edytowany chronić gwiazdki, które zostały zinterpretowane jako formatowania)
Paul Tomblin już dostarczył wspaniały odpowiedź, ale myślałem, że widziałem wzór w co robiłeś.
Szanse są będziesz używać znaleźć wygenerować listę plików do przetworzenia z grep jeden dzień, a dla takiego zadania istnieje znacznie bardziej przyjazne dla użytkownika narzędzie, Ack
działa na każdym systemie, który obsługuje Perl, i przeszukiwania wszystkich C++ powiązanych plików w katalogu rekurencyjnie za dany ciąg jest tak proste jak
ack "int\s+foo" --cpp
"--cpp"
domyślnie mecze .cpp .cc .cxx .m .hpp .hh .h .hxx
plików
(również pomija repozytorium katalogi domyślnie więc przyzwyczajenie pasuje na plikach, które zdarzają się wyglądać w nich plików.)
find . -regex ".*\.[cChH]\(pp\)?" -print
Ten testowany w porządku dla mnie w Cygwin.
To również znajdzie pliki z rozszerzeniem 'c',' Cpp', 'Hpp', które nie są plikami cPP ani zwykłymi rozszerzeniami.Ponadto, nie uniknąłeś poprawnie ostatniej kropki, co oznacza, że będziesz także miał pliki matematyczne o nazwach np. 'xcpp' lub' .C'. Wprowadziłeś kilka problemów, nie opanowując wyrażeń regularnych i nie znalazłeś właściwego. –
@Lyle, twoje polecenie nie działa na Linuksie :( – hugemeow
Można użyć find
w tej krótkiej formie:
find \(-name '*.cpp' -o -name '*.h' \) -print
-print
można pominąć. Używanie -o
tylko pomiędzy wyrażeniami jest szczególnie przydatne, gdy chcesz znaleźć wiele typów plików i wykonać to samo zadanie (powiedzmy obliczając md5sum).
krótki, jasny sposób to zrobić z find
jest:
find . -regex '.*\.\(cpp\|h\)'
Od strony man dla -regex
: "To jest mecz na całej ścieżce, a nie wyszukiwania." Stąd potrzeba przedrostka z .*
, aby dopasować początek ścieżki ./dir1/dir2/...
przed nazwą pliku.
Prawdopodobny duplikat [Wykryj uniks: wiele typów plików] (https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types) –