Hvordan finner jeg alle filer som inneholder en bestemt tekst på Linux?
Jeg prøver å finne en måte å skanne hele Linux-systemet mitt for alle filer som inneholder en bestemt tekststreng. Bare for å presisere, jeg leter etter tekst i filen, ikke i filnavnet.
Da jeg lette etter en måte å gjøre dette på, kom jeg over denne løsningen to ganger:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Den fungerer imidlertid ikke. Den ser ut til å vise hver eneste fil i systemet.
Er dette i nærheten av riktig måte å gjøre det på? Hvis ikke, hvordan skal jeg gjøre det? Denne muligheten til å finne tekststrenger i filer ville vært svært nyttig for noen programmeringsprosjekter jeg holder på med.
4881
3
Gjør følgende:
-r
eller-R
er rekursiv,-n
er linjenummer, og-w
står for å matche hele ordet.-l
(L med liten forbokstav) kan legges til for å angi filnavnet til de matchende filene.I tillegg til disse kan flaggene
--exclude
,--include
,--exclude-dir
brukes for effektiv søking:Dette vil bare søke gjennom de filene som har filtypene .c eller .h:
Dette vil utelukke søk i alle filer som slutter med .o:
For kataloger er det mulig å ekskludere en bestemt(e) katalog(er) ved hjelp av parameteren
--exclude-dir
. Dette vil for eksempel ekskludere katalogene dir1/, dir2/ og alle som samsvarer med *.dst/:Dette fungerer veldig bra for meg, for å oppnå nesten samme formål som ditt.
For flere alternativer, se
man grep
.Du kan bruke
grep -ilR
:i
står for ignore case (valgfritt i ditt tilfelle).R
står for rekursiv.l
står for "vis filnavnet, ikke selve resultatet"./
står for å starte ved roten av maskinen din.Du kan bruke ack. Det er som grep for kildekode. Du kan skanne hele filsystemet ditt med den.
Bare gjør det:
I rotkatalogen din.
Du kan også bruke regulære uttrykk, angi filtype osv.
**OPPDATERING
Jeg oppdaget nettopp The Silver Searcher, som er som ack, men 3-5 ganger raskere og til og med ignorerer mønstre fra en
.gitignore
-fil.