Како да се користи grep рекурзивно во одредени екстензии на датотеки
grep
е одлична алатка за пребарување низ датотеки и стандардно внесување во Linux и може да одговара на стринг и Regex обрасци. Сепак, понекогаш е неопходно да се контролира какви видови датотеки пребарува grep
, и има вградени знаменца за да го прави тоа.
Вклучувајќи само одредени датотеки во grep пребарувањата
Стандардно, grep
ќе ги пребарува сите датотеки во дадена папка и нејзините потпапки ако ја повикате со рекурзивното знаменце -r
. Ова ќе собере сè, но ако сакате само одредени екстензии, опцијата што сакате да ја користите е --include.
Знамето --include
му кажува на grep
да вклучува само датотеки што одговараат на одредена шема. Ако е наведено, grep
ќе ги третира сите ознаки за вклучување како бела листа. Можете да го користите ова со сите знаци на глоб на Linux, како што се џокерите за да одговараат на сè, вклучително и одредена екстензија:
grep -inr --include \*.txt "foo" ~/folder
Имајте предвид дека ова е избегнато со обратна црта \
, бидејќи е можно имињата на датотеките да имаат ѕвездички во нив. Можете исто така да наведете повеќе знаменца --include
, на пример, пребарување на сите изворни датотеки HTML, JS и CSS во wwwroot:
grep -inr --include \*.html --include \*.css --include \*.js "foo" ~/folder
Можете исто така да исклучите одредени имиња на датотеки, кои сепак ќе одговараат на сè, освен на глобот, делувајќи како црна листа на врвот на постоечката конфигурација:
grep -inr --exclude \*.txt "foo" ~/folder
Исто така, постои знаме за исклучување на цели директориуми одеднаш:
grep -inr --exclude-dir config "foo" ~/folder
Наместо тоа, се користи Find
Алтернативно, ако претпочитате да ја користите алатката find
за пребарување низ датотеки, можете да ја поврзете со grep
со помош на цевки и xargs
. find
може да пребарува со обрасци и Regex и има голем број предности, вклучително и можност за лесно филтрирање на датотеките врз основа на метаподатоци како што се големината, датумот на креирање и изменување и други идентификатори на Linux.
Командата е малку тапа, бидејќи ќе треба да користите -print0
на крајот од find
за да испечатите листа со една линија, а потоа да ја пренесете на xargs -0
и grep
од таму.
find ./ -type f -iname "*.txt" -print0 | xargs -0 grep "foo"