Korzystam z następującego polecenia do zliczania wierszy tekstu w plikach JAVA:
find . -name '*.java' | xargs wc -l
Jak mogę zmodyfikować find
parametry polecenia, aby pasowały do więcej niż jednego rozszerzenia pliku? Na przykład chciałbym użyć powyższej operacji dla plików CPP, C i H.
find
polecenia, ponieważ właśnie tam szukasz pasujących plików.find -print0 | xargs -0
wytworzenie lub nawet lepsze i prostsze:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +
. Pozwoli to uniknąć problemów z nazwami plików (puste miejsca, nowe wiersze itd.) I jest (bardzo) dobrym niestandardowym.Odpowiedzi:
Użyj
-o
opcji dla LUB. Na przykład, byłoby to listy.cpp
,.c
a.h
pliki:źródło
*
nie musi już być uciekł jeśli sformatowany jako kod. Całkowicie przeoczyłem to. :)Musisz użyć opcji -o. Na przykład poniższe oświadczenie znajduje wszystkie pliki png, jpg i gif w folderze.
Używam opcji -iname, aby dopasowanie nie uwzględniało wielkości liter.
źródło
„-Or” mówi, że szukam jednego lub obu zestawów.
Niedawno napisałem krótki przewodnik po użyciu find z operatorami logicznymi tutaj: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
źródło
Chociaż wszystkie odpowiedzi są mniej więcej takie same, nie uważam ich za czytelne przy użyciu wielu operatorów nazw i logicznych pomiędzy nimi.
Myślę, że może to być bardziej eleganckie rozwiązanie:
Zerwijmy to
find .
znajdzie wszystkie pliki rekurencyjnie w bieżącej ścieżce (w razie potrzeby zmień inną ścieżkę)-type f
zawęża wyszukiwanie tylko do plików (niezbyt dużego przyrostu prędkości, ale nadal ...)| grep -E
Użyłem tego, aby uzyskać rozpoznawanie grep lub (|
) operatora w systemie Mac OS X, który używa grep FreeBSD , GNU grep tego nie potrzebuje (sprawdź wman
pliku)."\.java$|\.cpp$|\.c$"
wyrażenie regularne, które zawiera pliki, których końce nazwa z.java
,.cpp
i.c
(te dodać Cię potrzebujesz)Następnie możesz przesłać wynikową listę do dalszego przetwarzania, np
Ten przykład usuwa
CRLF
zakończenie linii DOS / Windows dla OS X / LinuxLF
(jest to równieżsed
składnia OS X , sprawdź specyfikację swojej wersji).źródło
Posługiwać się
Wyjaśnienie
find
rekursja.-o
Oznacza-or
. Powyżej oznacza poszukiwanie tego symbolu wieloznacznego LUB tego. Jeśli masz tylko jeden wzór, nie ma takiej potrzeby-o
.źródło