Více na
Jak v Linuxu najdu všechny soubory obsahující určitý text?
Snažím se najít způsob, jak prohledat celý systém Linux a najít všechny soubory obsahující určitý textový řetězec. Jen pro upřesnění, hledám text v souboru, ne v jeho názvu.
Když jsem hledal, jak to udělat, narazil jsem dvakrát na toto řešení:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Nicméně to nefunguje. Zdá se, že se zobrazí každý jednotlivý soubor v systému.
Blíží se to správnému způsobu? Pokud ne, jak bych měl postupovat? Tato schopnost vyhledávat textové řetězce v souborech by byla mimořádně užitečná pro některé programátorské projekty, které dělám.
4881
3
Proveďte následující kroky:
-r
nebo-R
je rekurzivní,-n
je číslo řádku a-w
označuje přiřazení celého slova.-l
(malé písmeno L) může být přidáno pouze pro zadání názvu souboru, kterému odpovídá.Spolu s nimi lze pro efektivní vyhledávání použít příznaky
--exclude
,--include
,--exclude-dir
:Takto se prohledají pouze ty soubory, které mají příponu .c nebo .h:
Tím se vyloučí vyhledávání všech souborů končících příponou .o:
U adresářů je'možné vyloučit konkrétní adresář(e) pomocí parametru
--exclude-dir
. Například se vyloučí adresáře dir1/, dir2/ a všechny adresáře odpovídající *.dst/:Toto mi funguje velmi dobře, k dosažení téměř stejného účelu jako u vás.
Pro více možností se podívejte na
man grep
.Můžete použít
grep -ilR
:i
znamená ignorovat případ (ve vašem případě nepovinné).R
znamená rekurzivní.l
znamená "zobrazit název souboru, ne samotný výsledek"./
znamená začátek v kořenovém adresáři počítače.Můžete použít ack. Je to jako grep pro zdrojový kód. Můžete s ním prohledat celý souborový systém.
Stačí udělat:
V kořenovém adresáři.
Můžete také použít regulární výrazy, zadat typ souboru atd.
DOPLNĚNO
Právě jsem objevil The Silver Searcher, který je podobný ack, ale je 3-5x rychlejší než on a dokonce ignoruje vzory ze souboru
.gitignore
.