Próbowałem rekurencyjnie przeszukiwać wzór we wszystkich plikach .c w następujący sposób
> grep -lr search-pattern *.c
Ale dostałem to jako wynik
> grep: *.c: No such file or directory
Kiedy używam tego:
> grep -lr search-pattern *
Dostaję dużo. c plików w katalogach ze wzorem.
Co jest złego we wcześniejszym wyrażeniu?
--include=GLOB
opcji. W połączeniu z opcją rekurencyjną jest to bardzo potężne i nie wymagafind
. Miły!.
co jest koniec komendy.*.c
Wzór jest oceniany przez powłokę. Dotyczy to bieżącego katalogu, tak jak byś tego używałls *.c
.Myślę, że zamiast tego chcesz znaleźć wszystkie pliki pasujące do
*.c
wzorca (rekurencyjnie) igrep
wyszukać cię w nim. Oto sposób, aby to zrobić:Służy
xargs
do dołączania wyników wyszukiwania wedługfind
.Alternatywnie użyj
-exec
opcji, aby znaleźć, np .:Nie jestem też pewien, czy naprawdę chcesz tę
-l
opcjęgrep
. Zatrzyma się przy pierwszym meczu:źródło
find/xargs
przerwy składnię nazw zawierających spacje.-L
Możliwośćgrep
zatrzymania się na pierwszym meczu każdego pliku i kontynuować następnego pliku: jeśli ktoś chce tylko sprawdzić, czy wzór jest zawarty co najmniej raz w każdym danego pliku, to szybciej.-print0
opcji ixargs --null
.Wiem, że to dość stary wątek, ale ponieważ miałem to samo pytanie, chcę podzielić się moim preferowanym sposobem osiągnięcia tego samego, w znacznie krótszej formie.
źródło