Próbuję znaleźć sposób na przeskanowanie całego systemu Linux w poszukiwaniu wszystkich plików zawierających określony ciąg tekstu. Dla wyjaśnienia szukam tekstu w pliku, a nie w nazwie pliku.
Kiedy szukałem, jak to zrobić, dwukrotnie natknąłem się na to rozwiązanie:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Jednak to nie działa. Wygląda na to, że wyświetla każdy pojedynczy plik w systemie.
Czy to blisko właściwego sposobu na zrobienie tego? Jeśli nie, jak powinienem? Ta możliwość znajdowania ciągów tekstowych w plikach byłaby niezwykle przydatna w przypadku niektórych projektów programistycznych, które wykonuję.
-H
z -l
(a może grep
z fgrep
). Aby wykluczyć pliki o określonych wzorcach nazw, których użyłbyś find
w bardziej zaawansowany sposób. Warto jednak nauczyć się obsługiwać find
. Właśnie man find
.
find … -exec <cmd> +
jest łatwiejszy do pisania i szybszy niż find … -exec <cmd> \;
. Działa tylko wtedy, gdy <cmd>
akceptuje dowolną liczbę argumentów nazwy pliku. Oszczędność czasu wykonania jest szczególnie duża, jeśli <cmd>
uruchamia się powoli, jak skrypty Python lub Ruby.
grep "pattern" path/*.txt
.
między innymi jako jednoznaczny znak wieloznaczny. Radzę zawsze używać fgrep lub egrep.