Jak mogę grepować ukryte pliki?

96

Przeszukuję repozytorium Git i chcę dołączyć ten .gitfolder.

grep nie zawiera tego folderu, jeśli uruchomię

grep -r search *

Jakie byłoby polecenie grep, aby uwzględnić ten folder?

Steven Penny
źródło

Odpowiedzi:

136

Zapoznaj się z rozwiązaniem na końcu tego postu jako lepszą alternatywą dla tego, co robisz.

Możesz jawnie dołączyć ukryte pliki (katalog jest również plikiem).

grep -r search * .*

*Dopasuje wszystkie pliki z wyjątkiem tych ukrytych i .*będzie pasować tylko ukryte pliki. Jednak zakończy się to niepowodzeniem, jeśli w danym katalogu nie ma plików nieukrytych lub plików ukrytych. Możesz oczywiście wyraźnie dodać .gitzamiast .*.

Jeśli jednak chcesz po prostu przeszukać dany katalog, zrób to w ten sposób:

grep -r search .

.Dopasuje bieżącą ścieżkę, która będzie obejmować zarówno non-ukryte i ukryte pliki.

maska ​​bitowa
źródło
1
Pierwsze podejście (wyszukiwanie grep -r *. *) Zadziałało. Drugie podejście (wyszukiwanie grep -r.) Nie znalazło łańcucha. Znalazłem podobne wyniki, pomijając „-r” i przeszukując tylko katalog najwyższego poziomu. Używam GNU grep 2.6.3.
Alan
@Alan: To dziwne. Używam tego regularnie. Czy próbowałeś tego w tym samym katalogu?
maska ​​bitów
27
za pomocą .*obejmie katalogu nadrzędnego (bo ..mecze)
sehe
1
Czy można bezpiecznie uogólniać to rozwiązanie, ponieważ zachowanie może się różnić w zależności od muszli?
astletron
6
dla pierwszej wersji należy dodać --exclude-dir = .. aby uniknąć wyszukiwania w folderach nadrzędnych
user762353
12

Właśnie napotkałem ten problem i na podstawie odpowiedzi @ bitmask, oto moja prosta modyfikacja, aby uniknąć problemu wskazanego przez @sehe:

grep -r search_string * .[^.]*
szalony
źródło
nie otrzymuję żadnych wyników, używając tego: sudo grep -r ANDROID_HOME * .[^.]*co robię źle tutaj?
messerbill
@messerbill, gdzie przeprowadzasz wyszukiwanie?
szalony
3

Być może wolisz połączyć "grep" z poleceniem "find", aby uzyskać kompletne rozwiązanie, takie jak:

find . -exec grep -Hn search {} \;

To polecenie wyszuka w ukrytych plikach lub katalogach ciąg „szukaj” i wyświetli listę wszystkich plików, które są zgodne z następującym formatem wyjściowym:

Ścieżka pliku: Numer wiersza: wiersz z koincydencją

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Olvathar
źródło
2

Możesz użyć tego podejścia, zakładając, że przeszukujesz bieżący katalog (w przeciwnym razie zamień. Na żądany katalog):

find . -type f | xargs grep search

lub jeśli chcesz po prostu wyszukiwać na najwyższym poziomie (co jest szybsze do przetestowania, jeśli je wypróbowujesz):

find . -type f -maxdepth 1 | xargs grep search

AKTUALIZACJA: zmodyfikowałem przykłady w odpowiedzi na komentarze Scotta. Dodałem również „-type f”.

Alan
źródło
1
(1)  ~to katalog domowy użytkownika. Pytanie nie dotyczyło katalogu domowego użytkownika, więc odpowiedź nie powinna wspominać  ~. (2) W  findpoleceniu -name '*'nie działa (tj. Nie służy celowi).
Scott,
1

Aby przeszukać TYLKO wszystkie ukryte pliki i katalogi z Twojej bieżącej lokalizacji:

find . -name ".*" -exec grep -rs search {} \;

TYLKO wszystkie ukryte pliki:

find . -name ".*" -type f -exec grep -s search {} \;

TYLKO wszystkie ukryte katalogi:

find . -name ".*" -type d -exec grep -rs search {} \;
Tyler Christian
źródło
1

Wszystkie inne odpowiedzi są lepsze. To może być łatwe do zapamiętania:

find . -type f | xargs grep search

Znajduje tylko pliki (w tym ukryte) i greps każdy plik.

PrashantB
źródło
0

Aby znaleźć tylko w określonym folderze, możesz użyć:

ls -al | grep " \."

Wyświetlenie listy i potokowanie do grep jest bardzo prostym poleceniem.

Peter Mortensen
źródło
0

Oprócz sugestii Tylera, oto polecenie grepowania rekurencyjnie wszystkich plików i folderów, w tym plików ukrytych

find . -name "*.*" -exec grep -li 'search' {} \;
nikhilgoel1985
źródło
0

Aby zapobiec dopasowanie .i ..które nie są ukryte pliki, można korzystać grepz ls -Ajak w poniższym przykładzie:

ls -A | grep "^\."

^\. stwierdza, że ​​pierwszy znak musi być .

-ALub --almost-allwyłącza opcja wyników .i ..tak, że tylko ukryte pliki i katalogi są dopasowane.

mchid
źródło
0

Możesz także wyszukiwać określone typy ukrytych plików, takie jak pliki ukrytych katalogów:

grep -r --include=*.directory "search-string"

Może to działać lepiej niż niektóre inne opcje. Inne opcje, które działały, mogą być zbyt wolne.

mYnDstrEm
źródło