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?

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.


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 * .[^.]*

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

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”.


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 {} \;

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.


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.


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' {} \;

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.


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.

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.