Jak przeszukać wszystkie pliki .java w poszukiwaniu prostego ciągu (nie wyrażenia regularnego) w bieżącym katalogu i wszystkich podkatalogach w systemie Mac OS X? Chcę tylko wydrukować listę pasujących nazw plików i katalogów.
Jak przeszukać wszystkie pliki .java w poszukiwaniu prostego ciągu (nie wyrażenia regularnego) w bieżącym katalogu i wszystkich podkatalogach w systemie Mac OS X? Chcę tylko wydrukować listę pasujących nazw plików i katalogów.
Odpowiedzi:
I zawsze popularny
find . -name '*.java' | xargs grep -l 'string'
EDYCJA (autor: Frank Szczerba):
Jeśli masz do czynienia z nazwami plików lub katalogami, w których są spacje, najbezpieczniejszym sposobem na to jest:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Zawsze jest na to więcej niż jeden sposób.
Tradycyjna odpowiedź dla systemu UNIX byłaby odpowiedzią na to pytanie:
find . -name '*.java' | xargs grep -l 'string'
Prawdopodobnie będzie to działać w przypadku plików Java, ale spacje w nazwach plików są o wiele bardziej powszechne na komputerach Mac niż w tradycyjnym świecie UNIX. Kiedy nazwy plików ze spacjami są przekazywane przez powyższy potok, xargs zinterpretuje poszczególne słowa jako różne nazwy.
To, czego naprawdę chcesz, to rozdzielenie nazw, aby granice były jednoznaczne:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Alternatywą jest umożliwienie znalezienia uruchomienia grep, jak sugeruje Mark, jednak takie podejście jest wolniejsze, jeśli przeszukujesz dużą liczbę plików (ponieważ grep jest wywoływany raz na plik, a nie raz na całej liście plików).
Użyj grepa, który jest lepszy niż grep, ack :
ack -l --java "string"
To faktycznie użyje wyrażenia regularnego, jeśli chcesz, po prostu trzymaj się z dala od metaznaków lub uciec od nich, i możesz szukać ciągów.
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
Pomiń find
i użyj Spotlight
z wiersza poleceń. O wiele potężniejszy!
ŚWIATŁO POLECENIA - ZNAJDŹ SPOTKANIE GREP
Większość ludzi nie wie, że możesz wyszukiwać Spotlight z wiersza poleceń. Po co zapamiętywać wszystkie tajemne opcje wyszukiwania i grep, a co nie, kiedy Spotlight może wykonać pracę za Ciebie. Interfejs wiersza poleceń do Spotlight nazywa się mdfind. Ma tę samą moc, co wyszukiwanie Spotlight w GUI i więcej, ponieważ jest skryptowalny w wierszu poleceń!
Spróbuj tego:
grep -rl "string" */*java
Możesz także użyć programu GUI, takiego jak TextWrangler, aby przeprowadzić bardziej intuicyjne wyszukiwanie, gdzie opcje znajdują się w interfejsie.