Kako v Linuxu poiščem vse datoteke, ki vsebujejo določeno besedilo?
Poskušam najti način za pregledovanje celotnega sistema Linux za vse datoteke, ki vsebujejo določen niz besedila. Da pojasnim, iščem besedilo v datoteki in ne v imenu datoteke.
Ko sem iskal, kako to narediti, sem dvakrat naletel na to rešitev:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Vendar ne deluje. Zdi se, da prikaže vsako posamezno datoteko v sistemu.
Ali je to blizu pravilnemu načinu? Če ne, kako naj to storim? Ta zmožnost iskanja besedilnih nizov v datotekah bi bila izredno koristna za nekatere programske projekte, ki jih izvajam.
4881
3
Naredite naslednje:
-r
ali-R
je rekurziven,-n
je številka vrstice in-w
pomeni ujemanje celotne besede.-l
(mala črka L) se lahko doda, če želite navesti samo ime datoteke, ki se ujema.Poleg teh lahko za učinkovito iskanje uporabimo tudi oznake
--exclude
,--include
,--exclude-dir
:Tako se bodo iskale samo tiste datoteke, ki imajo končnico .c ali .h:
To bo izključilo iskanje vseh datotek, ki se končajo s končnico .o:
Pri imenikih je mogoče izključiti določen(e) imenik(e) s parametrom
--exclude-dir
. To bo na primer izključilo imenike dir1/, dir2/ in vse, ki ustrezajo *.dst/:To mi zelo dobro deluje, da bi dosegel skoraj enak namen, kot ga imaš ti.
Za več možnosti preverite
man grep
.Uporabite lahko
grep -ilR
:i
pomeni ignoriraj primer (v vašem primeru ni obvezno).R
pomeni rekurzivno.l
pomeni "prikaži ime datoteke in ne samega rezultata"./
pomeni začetek v korenu računalnika.Uporabite lahko ack. To je kot grep za izvorno kodo. Z njim lahko pregledate celoten datotečni sistem.
Naredite naslednje:
V korenskem imeniku.
Uporabite lahko tudi regularne izraze, določite vrsto datoteke itd.
DOPOLNITEV
Pravkar sem odkril The Silver Searcher, ki je podoben programu ack, vendar je 3-5x hitrejši od njega in celo ignorira vzorce iz datoteke
.gitignore
.