Jak znaleźć pliki z określonym tekstem w terminalu


168

Chciałbym znaleźć wszystkie pliki zawierające określony ciąg tekstu. Jak byś to zrobił w terminalu?


Jeśli chcesz uzyskać szybki wynik, użyj Spotlight. Również jeśli chcesz znaleźć pliki, które niekoniecznie przechowują tekst bezpośrednio w pliku, takie jak PDF lub ODF.
Joey,

Dobra rada, ale w moim przypadku nie jestem pewien, czy pliki są indeksowane, ponieważ znajdują się w sterownikach sieciowych. Są to również pliki XML należące do określonego programu.
Svish,

Spójrz na unix.stackexchange.com/a/37932/213832 to rozwiązanie działa dobrze
boyd4715

Odpowiedzi:


280
grep -r 'text goes here' path_goes_here

1
Proponuję man grepodkryć wszystkie wspaniałe opcje grep
Ludovic Kuty

Wyświetla listę wszystkich plików, które istnieją na ścieżce i dodaje: No such file or directory Próbuję uzyskać tylko listę wystąpień tekstu. Jak zdobyć tę listę?
CP3O,

7
Got it: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Ale to zwraca zawartość pasujących plików, a nie szczegóły pliku (nazwa, ścieżka). @ Sugestia CP3O działa.
geotheory

28

użyj reflektora

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

nie zapomnij spojrzeć na:

man mdfind

2
Czy to zadziała w przypadku plików, których wyróżnienie nie indeksuje (tj. Plików w ukrytych folderach, plikach konfiguracji systemu itp.)?
Peter Berg,

Wygląda na to, że Grep nie analizuje plików .xlsx, ale działało to dobrze. Kolejny prosty przykład: mdfind -onlyin. „tekst wyszukiwania”
FvD

11
  1. Przez Ack

brew install ack ack "text goes here"

  1. Poprzez znalezienie

find . |grep "text goes here"

  1. Przez grep

grep -RnslI "text goes here"


4

Możesz wybrać jedną z poniższych opcji w zależności od upodobań i potrzeb. Załóżmy, że musisz wyszukać pliki zawierające tekst - „asynchronicznie”, rekurencyjnie w bieżącym katalogu, możesz to zrobić na jeden z poniższych sposobów:

Korzystanie z grep wprowadź opis zdjęcia tutaj

Za pomocą potwierdzenia wprowadź opis zdjęcia tutaj


2

Odpowiedź Ignacio jest świetna i pomogła mi znaleźć pliki zawierające określony tekst. Jedynym problemem, z jakim się spotkałem, było to, że po uruchomieniu tego polecenia zostaną wyświetlone wszystkie pliki, w tym jeden, w którym wzorzec nie był wyświetlany.

No such file or directory To właśnie widzę obok plików, które nie zawierają wzorca.

Jeśli zamiast tego dodasz -sdo polecenia, jak w grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sjest używany, pokaże tylko, które pliki zawierają wzorzec.

Podobnie jeśli grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sużyto polecenia, drukuje plik plus numer linii i wystąpienie wzorca.

Proszę mnie poprawić, jeśli moje zrozumienie jest błędne.

Odniesienie: Jak mogę Grep nie drukować błędów „Brak takiego pliku lub katalogu”?


Innym sposobem na uniknięcie tych nieznośnych błędów takich plików , jest ustawienie stderr potoku na zero. grep ... 2>/dev/null. To rozwiązanie działa w przypadku większości programów, ponieważ zgłaszają komunikaty o błędach w strumieniu stderr, a nie w standardzie stdout. Używałem tego rozwiązania wiele razy find, ponieważ powiedzą, że odmówiono zgody na wiele plików.
jpaugh

(1) Jeśli otrzymujesz No such file or directorywiadomości dla istniejących plików, robisz coś złego lub system jest uszkodzony. (2) Co to [PATH OF PARENT]ma z tym wspólnego?
G-Man,

@ G-Man Zredagowałem odpowiedź, aby pokazać, [PATH OF DIRECTORY]że ktoś nieznany chciał wiedzieć, dlaczego umieściłem./
CP3O

@ G-Man Używam Maca, a nie Ubuntu, nie jestem pewien, jak mój system się zepsuje, jeszcze na nim prawie nic nie zrobiłem.
CP3O,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.