Si të kërkoni në mënyrë rekursive emrat e drejtorive në Linux


Çdo gjë në Linux ruhet në drejtori dhe kur shkruani skriptet bash, shpesh është e dobishme të kërkoni drejtoritë me emër. Për fat të mirë, mund të përdorni komandën gjeni për të kërkuar në mënyrë rekursive emrat e drejtorive dhe për të shfaqur përputhjet.

Kërkimi i drejtorive

Komanda find  përdoret për të kërkuar nëpër drejtori në Linux. Si parazgjedhje, është plotësisht rekursive, kështu që do të kërkojë nëpër të gjitha nën-drejtoritë për të gjetur përputhje.

Nëse përdorni flamurin -type d , find do të funksionojë në modalitetin e drejtorisë dhe do të kërkojë vetëm drejtoritë, duke mos përputhur asnjë skedar. Mund ta përdorni së bashku me -name për të kërkuar drejtoritë sipas emrit:

find . -type d -name "search"

Kjo komandë fillon në drejtorinë aktuale, por mund të kërkojë edhe në drejtori të tjera si ~.

Problemi me përdorimin e -name është se ai do të përputhet vetëm me emrat e drejtpërdrejtë, që do të thotë se do të dështojë nëse nuk përputhet me të gjithë emrin e drejtorisë. Megjithatë, mund të përdorni shkronja të egra për ta zgjidhur këtë, dhe vendosja e një shkronja të egër para dhe pas vargut të kërkimit do të përputhet me nënvargun kudo në emrin e drejtorisë. Nëse po përfshini edhe emrat e skedarëve, mund të përdorni shkronja të ngurta për të përputhur skedarët që përfundojnë në një shtesë të caktuar

find . -type d -name "*search*"

Megjithatë, kjo do të përputhet vetëm me emrin e drejtorisë dhe do të injorojë përsëri drejtorinë prind. Nëse dëshironi të përputheni duke përdorur të gjithë shtegun e skedarit, do t'ju duhet të përdorni opsionin Regex të mbuluar më poshtë.

find do të printojë një listë të çdo drejtorie që përputhet, por do të dëshironi të jeni të kujdesshëm për t'u siguruar që jeni të qëndrueshëm në përdorimin e shtigjeve absolute ose relative, sepse kjo do të ndikojë në përgjigjen përfundimtare. Nëse përdorni një shteg relativ, si periudha për drejtorinë aktuale, përgjigjet do të jenë relative. Por nëse e specifikoni direkt shtegun, edhe nëse është direktoria aktuale, shtegu do të jetë absolut, duke filluar nga rrënjët.

find bën gjithashtu më shumë sesa thjesht kërkimin e tekstit—ai mund të përdoret për të përputhur skedarët bazuar në vulat kohore, madhësitë e skedarëve dhe identifikuesit e tjerë të Linux. Mund të përdoret gjithashtu me -exec për të ekzekutuar komanda në çdo skedar ose drejtori.

Kërkimi me Regex

Ju gjithashtu mund të përdorni filtrim më të avancuar me find, duke e përdorur atë me shprehje të rregullta (Regex) për të gjetur përputhje për pyetje komplekse kërkimi.

Një përfitim kryesor i përdorimit të Regex është se ai do të përputhet me të gjithë drejtorinë, duke përfshirë drejtoritë bazë që çojnë deri në.

Ju mund të përdorni Regex me -regex në vend të -name. Ndihmon gjithashtu aktivizimin e sed-përputhshëm Regex duke përdorur -regexttype sed.

Gjej . -type d -regexttype sed -regex .*one\/.*

Në këtë shembull, regex fillon me .*one për të përputhur të gjitha drejtoritë që përfundojnë me një. Periudha dhe shkronja e egër do të përputhen me çdo nënvarg që çon në këtë. Më pas, prerja e përparme shmanget me \/ për t'u përputhur me fundin e drejtorisë dhe më pas një tjetër karakteristikë për të përputhur me çdo emër drejtorie.

Në përgjithësi, kjo do të përputhet me çdo drejtori, prindi i të cilit përfundon me një, kudo që është, madje edhe në nëndrejtori. Regex është i fuqishëm dhe do të dëshironi të jeni të kujdesshëm që i juaji të përputhet saktësisht me atë që dëshironi të bëjë - jo më shumë, as më pak.

Përdorimi i grep Me find

Meqenëse find mund të nxjerrë gjithashtu një listë të papërpunuar drejtorish, ajo mund të dërgohet në komanda të tjera për përpunim. Për shembull, grep përdoret si një mjet kërkimi teksti dhe përdoret shpejt në vijën e komandës për kërkim dhe theksim të thjeshtë.

find . -type d | grep foo

grep është gjithashtu një mjet kërkimi i plotë më vete dhe mund të përdoret me mjete si shprehjet e rregullta për të përmirësuar kërkimin. Ju mund të lexoni udhëzuesin tonë për përdorimin e tij për të mësuar më shumë.