Állománykeresés

Gyakran előforduló feladat, hogy bizonyos jellemzőik alapján állományokat kell előkeresni az állományrendszerből. Erre a célra a find program szolgál. Hívási módja a következő:

find pathname_list expr

A find parancs rekurzív módon végighalad a pathname_list-tel megadott elérési nevektől kezdve az állományrendszeren, megkeresi azokat az állományokat, amelyekre igaz a paraméterként megadott expr logikai feltételsorozat. Az expr-ben több feltételt sorolhatunk fel, amelyek egymással logikai AND kapcsolatban vannak, ha másképp nem rendelkezünk. A feltételek nagyobb része egy-egy állományjellemzőre kérdez, mint a méret (-size) vagy a kor (-newer)..., de számtalan más feltétel áll rendelkezésre (lásd minimanuál). Amennyiben a feltételek közt a -print feltétel is szerepel, akkor a standard outputra írja a feltételekhez illeszkedőnek talált állományok nevét, illetve, ha a -exec cmd feltétel is szerepel, akkor végrehajtja rajtuk a cmd UNIX parancsot.

Az alábbi parancs az aktuális katalógusban lévő állományokat listázza ki (magát a katalógust és a szülő katalógust is):

$ find . -print

.

./.profile

./.lastlogin

./.sh_history

./valami

./vers1

./nu

./nme

./semmi

./akarmi

./vers2

./ascii.c

./logsh

./temp

./semmi1

./delta

$

Az alábbi parancs törli mindazokat az a.out nevű (végrehajtható bináris) állományokat, illetve mindazokat a .o kiterjesztésű (object) állományokat amelyekhez egy hétnél régebben nem fért hozzá senki (ne feledkezzünk meg a zárójelek levédéséről):

$ find /\( -name a.out -o -name "*.o" \) -atime +7 -exec rm {} \;

$

Az -exec opció hatására végrehajtott törlésnél a megtalált állomány nevére a kapcsos zárójelpárral hivatkozhatunk. A pontosvesszőt azért kell kiírnunk, mert az exec opcióval megadott cmd parancs (példánkban az rm parancs) végét jelzi, s elvileg megadhatunk utána további opciókat. (Vigyázzunk arra is, hogy a jobboldali kapcsos zárójel és a backslash karakter között szóköznek kell lennie!)

 

Tartalomjegyzék