Jak znaleźć wszystkie pliki zawierające określony tekst w Linuksie?

chcesz poprawić ten post? Podaj szczegółowe odpowiedzi na to pytanie, w tym cytaty i wyjaśnienie, dlaczego Twoja odpowiedź jest prawidłowa. Odpowiedzi bez wystarczającej ilości szczegółów mogą być edytowane lub usuwane.

I ' m trying to find a way aby przeskanować cały system Linux w poszukiwaniu wszystkich plików zawierających określony ciąg tekstu. Dla jasności, Szukam tekstu w pliku, a nie w nazwie pliku.

Kiedy szukałem jak to zrobić, natknąłem się na to rozwiązanie dwa razy:

find / -type f -exec grep -H 'text-to-find-here' {} \;
Jednak to nie działa. Wydaje się, że wyświetla każdy pojedynczy plik w systemie. Czy tak blisko jest właściwego sposobu? Jeśli nie, to jak mam to zrobić? Ta możliwość znajdowania ciągów tekstowych w plikach byłaby niezwykle przydatna dla robię kilka projektów programistycznych.
Author: Peter Mortensen, 2013-06-06

30 answers

Wykonaj następujące czynności:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r lub -R jest rekurencyjny,
  • -n jest numerem linii, oraz
  • -w oznacza dopasowanie całego słowa.
  • -l (małe litery L) można dodać po prostu podając nazwę pliku pasujących plików.
  • -e jest wzorcem używanym podczas wyszukiwania

Wraz z tymi, --exclude, --include, --exclude-dir flagi mogą być użyte do efektywnego wyszukiwania:

  • to będzie przeszukiwać tylko te pliki, które mają .c lub .H rozszerzenia:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
  • spowoduje to wykluczenie przeszukiwania wszystkich plików kończących się na.o rozszerzenie:
grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"
  • dla katalogów można wykluczyć jeden lub więcej katalogów za pomocą parametru --exclude-dir. Na przykład, spowoduje to wykluczenie dirs dir1/, dir2 / i wszystkich z nich pasujących *.dst/:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
To działa bardzo dobrze dla mnie, aby osiągnąć prawie ten sam cel, jak Twój.

Aby uzyskać więcej opcji Sprawdź man grep.

 10531
Author: rakib_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-26 21:27:47

Możesz użyć grep -ilR:

grep -Ril "text-to-find-here" /
  • i oznacza ignoruj przypadek (opcjonalnie w Twoim przypadku).
  • R oznacza rekurencyjny.
  • l oznacza "Pokaż nazwę pliku, a nie sam wynik".
  • / oznacza początek w korzeniu maszyny.
 1656
Author: fedorqui 'SO stop harming',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-23 10:02:31

Możesz użyć ack . Jest to jak grep dla kodu źródłowego. Możesz przeskanować cały system plików.

Po prostu zrób:

ack 'text-to-find-here'

W katalogu głównym.

Możesz także użyć wyrażeń regularnych , określić typ pliku, itd.


UPDATE

Właśnie odkryłem Silver Searcher , który jest jak ack, ale 3-5x szybszy od niego i nawet ignoruje wzory z pliku .gitignore.

 363
Author: Stephan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-12 12:31:20

Możesz użyć:

grep -r "string to be searched"  /path/to/dir

r oznacza rekurencyjny i tak będzie przeszukiwać w podanej ścieżce, a także jej podkatalogach. Spowoduje to podanie nazwy pliku, a także wydrukowanie linii w pliku, w którym pojawia się ciąg znaków.

Lub polecenie podobne do tego, które próbujesz (przykład:) do wyszukiwania we wszystkich plikach javascript (*."js"): {]}

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

Spowoduje wydrukowanie linii w plikach, w których pojawia się tekst, ale nie wyświetli nazwy pliku.

Dodatkowo do tej komendy możemy też napisać: grep-rn "String to search" /path / to / directory / or / file -r: wyszukiwanie rekurencyjne n: numer linii zostanie wyświetlony dla meczów

 220
Author: learner_19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 08:35:40

Możesz użyć tego:

grep -inr "Text" folder/to/be/searched/
 127
Author: A R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-31 14:09:59

Lista nazw plików zawierających dany tekst

Po pierwsze, wierzę, że użyłeś -H zamiast -l. Możesz również spróbować dodać tekst wewnątrz cudzysłowów, po którym następuje {} \.

find / -type f -exec grep -l "text-to-find-here" {} \; 

Przykład

Załóżmy, że szukasz plików zawierających określony tekst "Licencja Apache" w Twoim katalogu. Wyświetli wyniki nieco podobne do poniższych (wynik będzie różny w zależności od zawartości katalogu).

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

Usuń case sensitivity

Nawet jeśli nie używasz o przypadku, jak "tekst" vs "tekst", możesz użyć przełącznika -i, aby zignorować wielkość liter. Więcej szczegółów można przeczytać tutaj .

Mam nadzieję, że to ci pomoże.
 85
Author: lkamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 05:54:21

grep (GNU lub BSD)

Możesz użyć narzędzia grep do rekurencyjnego przeszukiwania bieżącego folderu, takiego jak:

grep -r "class foo" .

Notatka: -r - rekurencyjnie przeszukuje podkatalogi.

Można również użyć składni globbingu do wyszukiwania w określonych plikach, takich jak:

grep "class foo" **/*.c

Uwaga: używając opcji globbingu (**), skanuje rekurencyjnie wszystkie pliki z określonym rozszerzeniem lub wzorem. aby włączyć tę składnię, Uruchom: shopt -s globstar. Możesz również użyć **/*.* dla wszystkich plików (z wyłączeniem ukrytych i bez rozszerzenia) lub dowolnego innego wzorca.

Jeśli masz błąd, że twój argument jest zbyt długi, rozważ Zawężenie wyszukiwania lub użyj składni find, takiej jak:

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

Alternatywnie, użyj ripgrep.

ripgrep

Jeśli pracujesz nad większymi projektami lub dużymi plikami, powinieneś użyć ripgrep zamiast tego, jak:

rg "class foo" .

Checkout the dokumenty, kroki instalacji lub kod źródłowy na stronie projektu GitHub .

Jest znacznie szybszy niż jakiekolwiek inne narzędzie, takie jak GNU/BSD grep, ucg, ag, sift, ack, pt podobnie, ponieważ jest zbudowany na silniku regex Rusta, który wykorzystuje skończone automaty, SIMD i agresywne dosłowne optymalizacje, aby wyszukiwanie było bardzo szybkie.

Obsługuje ignorowanie wzorce określone w plikach .gitignore, więc pojedyncza ścieżka do pliku może być dopasowana do wielu wzorców glob jednocześnie.


Możesz użyć typowych parametrów, takich jak:

  • -i - niewrażliwe wyszukiwanie.
  • -I - Ignoruj pliki binarne.
  • -w - Wyszukiwanie całych słów(w przeciwieństwie do częściowego dopasowywania słów).
  • -n - Pokaż linię meczu.
  • -C/--context (np. -C5) - zwiększa kontekst, więc widzisz otaczający kod.
  • --color=auto - zaznacz pasujący tekst.
  • -H - wyświetla nazwę pliku, w którym znajduje się tekst.
  • -c - wyświetla liczbę pasujących linii. Może być łączony z -H.
 84
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-04 00:48:20

Jeśli Twoje grep nie obsługuje wyszukiwania rekurencyjnego, możesz połączyć find z xargs:

find / -type f | xargs grep 'text-to-find-here'

Wydaje mi się to łatwiejsze do zapamiętania niż format find -exec.

Wyświetli nazwę pliku i zawartość dopasowanej linii, np.

/home/rob/file:text-to-find-here

Opcjonalne flagi, które możesz dodać do grep:

  • -i - wyszukiwanie niewrażliwe na wielkość liter
  • -l - wypisuje tylko nazwę pliku, w którym znaleziono dopasowanie
  • -h - wypisuje tylko linię, która pasowała (Nie nazwa pliku)
 58
Author: RobEarl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 09:19:16
grep -insr "pattern" *
  • i: ignoruje rozróżnienia wielkości liter zarówno w wzorze, jak i w plikach wejściowych.
  • n: przedrostek każdego wiersza wyjścia z numerem linii 1 w jego pliku wejściowym.
  • s: wyłącza komunikaty o błędach dotyczące nieistniejących lub nieczytelnych plików.
  • r: read all files under each directory, recursively.
 46
Author: enfinet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 07:39:14

Jest nowe narzędzie o nazwie Silversearcher

sudo apt install silversearcher-ag

Ściśle współpracuje z Gitem i innymi VC. Więc nie dostaniesz nic w .git lub inny katalog.

Możesz po prostu użyć

ag "Search query"

I zrobi to zadanie za Ciebie!

 46
Author: Neil Agarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-23 17:01:39

Jak znaleźć wszystkie pliki zawierające określony tekst w Linuksie? (...)

Natknąłem się na to rozwiązanie dwa razy:

find / -type f -exec grep -H 'text-to-find-here' {} \;


Jeśli używasz znajdź jak w twoim przykładzie, lepiej dodać -s (--no-messages) do grep, i 2>/dev/null na końcu polecenia, aby uniknąć wielu uprawnień odrzuconych wiadomości wydanych przez grep i find:

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

Znajdź jest standardowym narzędziem do wyszukiwania plików-połączone z grepem w poszukiwaniu konkretnego tekstu - na platformach uniksowych. Komenda find jest często łączona z xargs .

Szybsze i łatwiejsze narzędzia istnieją w tym samym celu-patrz poniżej. Lepiej wypróbuj je, pod warunkiem, że są dostępne na twojej platformie , oczywiście:

Szybsze i łatwiejsze alternatywy

RipGrep - najszybsze narzędzie wyszukiwania:

rg 'text-to-find-here' / -l

The Silver Searcher:

ag 'text-to-find-here' / -l

Ack:

ack 'text-to-find-here' / -l

Uwaga: możesz dodać 2>/dev/null do tych poleceń, aby ukryć wiele komunikatów o błędach.


Ostrzeżenie: chyba, że naprawdę nie można tego uniknąć, nie szukaj z '/' (katalog główny) , aby uniknąć długiego i nieefektywnego wyszukiwania! Więc w powyższych przykładach lepiej zastąpić '/' przez nazwę podkatalogu, np. "/ home " w zależności od tego, gdzie chcesz Szukaj...

 40
Author: Bludzee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-02 17:21:54

Try:

find . -name "*.txt" | xargs grep -i "text_pattern"
 32
Author: venkat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 15:33:47

Użyj pwd, Aby wyszukać z dowolnego katalogu, w którym się znajdujesz, rekurencyjnie w dół

grep -rnw `pwd` -e "pattern"

Update W zależności od używanej wersji grepa, można pominąć pwd. W nowszych wersjach . wydaje się być domyślnym przypadkiem dla grepa, jeśli nie podano katalogu tak więc:

grep -rnw -e "pattern"

Lub

grep -rnw "pattern"

Zrobi to samo co wyżej!

 31
Author: mahatmanich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 12:29:21

grep może być używany nawet jeśli nie szukamy Sznurka.

Simply running,

grep -RIl "" .

Wyświetli ścieżkę do wszystkich plików tekstowych, tzn. zawierających tylko drukowalne znaki.

 22
Author: Alex Jasmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 00:01:43

Silver Searcher to świetne narzędzie, ale ripgrep może być jeszcze lepszy.

To działa na Linuksie, Mac i Windows, i został napisany na Hacker News kilka miesięcy temu (ma link do bloga Andrew Gallant, który ma link GitHub):

Ripgrep-nowe narzędzie do wyszukiwania wiersza poleceń

 21
Author: AAAfarmclub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 00:10:37

Oto lista poleceń, które można użyć do przeszukiwania pliku.

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "word-1|word-2” directory-path

egrep -w -R "word-1|word-2” directory-path
 20
Author: Atul Arvind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 05:47:35
find /path -type f -exec grep -l "string" {} \;

Wyjaśnienie z komentarzy

Find to polecenie, które pozwala na wyszukiwanie plików i innych obiektów, takich jak katalogi i linki w podkatalogach danej ścieżki. Jeśli nie określisz maski, która powinna spełniać nazwy plików, wyliczy ona wszystkie obiekty katalogu.

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename
 18
Author: Vinod Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-26 13:12:58

Mam nadzieję, że to pomoże...

Rozwinięcie bitu grep, aby podać więcej informacji na wyjściu, na przykład, aby uzyskać numer linii w pliku, w którym znajduje się tekst, można wykonać w następujący sposób:

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

A jeśli masz pojęcie, jaki jest typ pliku, możesz zawęzić wyszukiwanie, podając rozszerzenia typów plików do wyszukiwania, w tym przypadku Pliki .pas lub .dfm:

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

Krótkie wyjaśnienie opcji:

  1. . w find określa z bieżący katalog.
  2. -name "*.*" : dla wszystkich plików (- name "*.pas "- o-name " *.dfm"): tylko pliki *.pas lub *.dfm, lub określone za pomocą -o
  3. -type f określa, że szukasz plików
  4. -print0 i --null po drugiej stronie | (potoku) są kluczowe, przekazując nazwę pliku z find do grep osadzonego w xargs, pozwalając na przekazywanie nazw plików ze spacjami w nazwach plików, pozwalając grepowi traktować ścieżkę i nazwa pliku jako jeden ciąg znaków, a nie rozbić go na każdej spacji.
 18
Author: Gert van Biljon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 00:03:28

Spróbuj:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Który przeszukuje wszystkie systemy plików, ponieważ / jest katalogiem głównym.

Do użycia w folderze domowym:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

Dla bieżącego folderu użyj:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;
 16
Author: user4863663,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-09 09:49:54

Prosty find może działać pod ręką. alias w pliku ~/.bashrc:

alias ffind find / -type f | xargs grep

Uruchom nowy terminal i wydaj:

ffind 'text-to-find-here'
 16
Author: danglingpointer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 00:15:03

Jeśli chcesz użyć {[0] } to użyj find + grep:

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

Kroki :

  1. użyj find do wyszukiwania plików,
  2. wykonać grep na wszystkich z nich.

To daje moc find do znajdowania plików.

  • użyj -name Pattern Jeśli chcesz grep tylko niektóre pliki:

find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

Możesz użyć różnych opcji find, aby poprawić wyszukiwanie plików.

 16
Author: BreakBadSP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-21 13:37:14

Napisałem skrypt Pythona który robi coś podobnego. Tak należy używać tego skryptu.

./sniff.py path pattern_to_search [file_pattern]

Pierwszy argument, path, to katalog, w którym będziemy przeszukiwać rekurencyjnie. Drugi argument, pattern_to_search, jest wyrażeniem regularnym, które chcemy wyszukać w pliku. Używamy formatu wyrażeń regularnych zdefiniowanego w Pythonie re biblioteka. W tym skrypcie . pasuje również do nowej linii.

Trzeci argument, file_pattern, jest opcjonalny. To jest inne wyrażenie regularne, które działa na nazwie pliku. Będą brane pod uwagę tylko te pliki, które pasują do tego wyrażenia regularnego.

Na przykład, jeśli chcę przeszukiwać pliki Pythona z rozszerzeniem py zawierającym Pool(, po którym następuje słowo Adaptor, wykonuję następujące czynności:

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

I voila, generuje ścieżkę dopasowanych plików i numer linii, przy której znaleziono dopasowanie. Jeśli znaleziono więcej niż jedno dopasowanie, wtedy do nazwy pliku zostanie dołączony każdy numer linii.

 15
Author: Dilawar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-30 17:59:08

Jestem zafascynowany tym, jak proste grep robi to z 'rl':

grep -rl 'pattern_to_find' /path/where/to/find

-r to recursively find a file / directory inside directories..
-l to list files matching the 'pattern'

Użyj '- r' bez 'l', aby zobaczyć nazwy plików, po których następuje tekst, w którym znajduje się wzorzec !

grep -r 'pattern_to_find' /path/where/to/find
Działa idealnie...
 15
Author: nitinr708,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-27 01:01:50

Użycie:

grep -c Your_Pattern *

To pokaże ile kopii Twojego wzorca znajduje się w każdym z plików w bieżącym katalogu.

 14
Author: Dr_Hope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 00:13:12

Istnieje ack narzędzie, które zrobi dokładnie to, czego szukasz.

Http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

Możesz zignorować -i dla wyszukiwania uwzględniającego wielkość liter

 14
Author: Pal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-13 00:17:58

Grep jest twoim dobrym przyjacielem, aby to osiągnąć.

grep -r <text_fo_find> <directory>

Jeśli nie zależy ci na przypadku tekstu do znalezienia, użyj:

grep -ir <text_to_find> <directory>
 14
Author: Prash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-27 01:00:31

Aby wyszukać ciąg znaków i wypisać tylko ten wiersz z szukanym ciągiem:

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

Np.:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

Aby wyświetlić nazwę pliku zawierającą szukany ciąg:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

Np.:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;
 13
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-25 11:08:41

Wszystkie poprzednie odpowiedzi sugerują grep I find. Ale jest inny sposób: użyj Midnight Commander

Jest to darmowe narzędzie (30 lat, sprawdzone przez czas), które jest wizualne bez GUI. Ma mnóstwo funkcji, a znajdowanie plików to tylko jedna z nich.

 13
Author: Peter M. - stands for Monica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-24 15:28:42

Poniższe polecenie będzie działać poprawnie dla tego podejścia:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;
 12
Author: Pradeep Goswami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 23:47:15

Uniknij kłopotów i zainstaluj ACK-grep. Eliminuje to wiele problemów z pozwoleniami i cytatami.

apt-get install ack-grep

Następnie przejdź do katalogu, który chcesz przeszukać i uruchom polecenie poniżej

cd /
ack-grep "find my keyword"
 11
Author: Kareem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 03:41:43