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.
Proveďte následující kroky:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-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:
V případě, že se jedná o soubor s příponou .c,h, můžete použít příkaz grep --include=\*.{c,h} -rnw '/cesta/do/někde/' -e "pattern"
Tím se vyloučí vyhledávání všech souborů končících příponou .o:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
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/:
Vyloučení adresářů: grep --exclude-dir={dir1,dir2,*.dst} -rnw '/cesta/do/někde/' -e "vzor"
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
:
grep -Ril "text-to-find-here" /
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:
ack 'text-to-find-here'
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
.