Si të përdorni grep në mënyrë rekursive brenda disa shtesave të skedarëve


grep është një mjet i shkëlqyeshëm për kërkimin nëpër skedarë dhe hyrje standarde në Linux dhe është në gjendje të përputhet me modelet e vargut dhe Regex. Megjithatë, ndonjëherë është e nevojshme të kontrollohet se çfarë lloje skedarësh kërkon grep, dhe ka flamuj të integruar për ta bërë këtë.

Përfshin vetëm disa skedarë në kërkimet grep

Si parazgjedhje, grep do të kërkojë të gjithë skedarët në një dosje të caktuar dhe nëndosjet e saj nëse e thirrni atë me flamurin rekurziv -r . Kjo do të marrë gjithçka, por nëse dëshironi vetëm shtesa të caktuara, opsioni që dëshironi të përdorni është --include.

Flamuri --include i thotë grep të përfshijë vetëm skedarë që përputhen me një model të caktuar. Nëse specifikohet, grep do t'i trajtojë të gjithë flamujt e përfshirë si një listë të bardhë. Ju mund ta përdorni këtë me çdo karakter Linux glob, të tilla si shkronja të ngurta për të përshtatur gjithçka, duke përfshirë një shtesë të caktuar:

grep -inr --include \*.txt "foo" ~/folder

Vini re se kjo është shmangur me një vijë të prapme \, sepse është e mundur që emrat e skedarëve të kenë yje në to. Ju gjithashtu mund të specifikoni disa flamuj --include , për shembull, duke kërkuar të gjithë skedarët burimor HTML, JS dhe CSS në një wwwroot:

grep -inr --include \*.html --include \*.css --include \*.js "foo" ~/folder

Gjithashtu, mund të përjashtoni disa emra skedarësh, të cilët do të përputhen me gjithçka, përveç globit, duke vepruar si një listë e zezë në krye të konfigurimit ekzistues:

grep -inr --exclude \*.txt "foo" ~/folder

Ekziston gjithashtu një flamur për të përjashtuar të gjitha drejtoritë menjëherë:

grep -inr --exclude-dir config "foo" ~/folder

Duke përdorur gjeni në vend të kësaj

Përndryshe, nëse preferoni të përdorni mjetin find për të kërkuar nëpër skedarë, mund ta lidhni atë me grep duke përdorur tuba dhe xargs. find mund të bëjë kërkime me modele dhe Regex dhe ka një sërë avantazhesh, duke përfshirë aftësinë për të filtruar lehtësisht skedarët bazuar në meta të dhënat si madhësia, data e krijimit dhe modifikimit dhe identifikuesve të tjerë Linux.

Komanda është pak e mprehtë, pasi do t'ju duhet të përdorni -print0 në fund të find për të printuar një listë të vetme rreshti dhe më pas ta kaloni në xargs -0 dhe grep nga atje.

 find ./ -type f -iname "*.txt" -print0 | xargs -0 grep "foo"