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.