Ik zoek door een Git-repository en wil de map .git
toevoegen.
grep
bevat 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 .git
toevoegen 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 grep
gebruiken met ls -A
zoals in dit voorbeeld:
ls -A | grep "^\."
^\.
geeft aan dat het eerste teken .
De -A
of --almost-all
optie 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.