Hoe kan ik verborgen bestanden grep?

Ik zoek door een Git-repository en wil de map .gittoevoegen.

grepbevat deze map niet als ik ren

grep -r search *

Wat zou een grep-commando zijn om deze map op te nemen?


Antwoord 1, autoriteit 100%

Raadpleeg de oplossing aan het einde van dit bericht als een beter alternatief voor wat u aan het doen bent.

Je kunt verborgen bestanden expliciet opnemen (een map is ook een bestand).

grep -r search * .[^.]*

De *komt overeen met alle bestanden behalve verborgen en .[^.]*komt alleen overeen met verborgen bestanden zonder ... Dit zal echter mislukken als er geen niet-verborgen bestanden of geen verborgen bestanden in een bepaalde map zijn. Je kunt natuurlijk expliciet .gittoevoegen in plaats van .*.

Als u echter gewoon in een bepaalde directory wilt zoeken, doet u dat als volgt:

grep -r search .

De .komt overeen met het huidige pad, dat zowel niet-verborgen als verborgen bestanden zal bevatten.


Antwoord 2, autoriteit 11%

Ik kwam net dit probleem tegen, en op basis van het antwoord van @bitmask, hier is mijn eenvoudige wijziging om het probleem te vermijden dat door @sehe wordt aangegeven:

grep -r search_string * .[^.]*

Antwoord 3, autoriteit 3%

Misschien geeft u er de voorkeur aan om “grep” te combineren met het “find” commando voor een complete oplossing zoals:

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

Deze opdracht zoekt in verborgen bestanden of mappen naar de tekenreeks “zoeken” en geeft alle bestanden weer die samenvallen met dit uitvoerformaat:

Bestandspad:Regelnummer:regel met toeval

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

Antwoord 4

Misschien wilt u deze benadering gebruiken, ervan uitgaande dat u in de huidige directory zoekt (anders vervangt u . door de gewenste directory):

find . -type f | xargs grep search

of als je gewoon op het hoogste niveau wilt zoeken (wat sneller is om te testen als je deze uitprobeert):

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

UPDATE: ik heb de voorbeelden aangepast naar aanleiding van Scotts opmerkingen. Ik heb ook “-type f” toegevoegd.


Antwoord 5

Om te voorkomen dat .en ..overeenkomen die geen verborgen bestanden zijn, kunt u grepgebruiken met ls -Azoals in dit voorbeeld:

ls -A | grep "^\."

^\.geeft aan dat het eerste teken .

De -Aof --almost-alloptie sluit de resultaten .en ..uit, zodat alleen verborgen bestanden en mappen komen overeen.


Antwoord 6

Om ALLEEN in alle verborgen bestanden en mappen vanaf uw huidige locatie te zoeken:

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

ALLEEN alle verborgen bestanden:

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

ALLEEN alle verborgen mappen:

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

Antwoord 7

Alle andere antwoorden zijn beter. Deze is misschien makkelijk te onthouden:

find . -type f | xargs grep search

Het vindt alleen bestanden (inclusief verborgen) en greps elk bestand.


Antwoord 8

Om alleen binnen een bepaalde map te zoeken, kunt u het volgende gebruiken:

ls -al | grep " \."

Het is een heel eenvoudig commando om een ​​lijst te maken en naar grep te pipen.


Antwoord 9

Naast de suggestie van Tyler, is hier de opdracht om alle bestanden en mappen recursief te grep, inclusief verborgen bestanden

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

Antwoord 10

Je kunt ook zoeken naar specifieke typen verborgen bestanden, zoals voor verborgen mapbestanden:

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

Dit werkt mogelijk beter dan sommige andere opties. De andere opties die werkten, kunnen te traag zijn.

Other episodes