FIND(1)

NÉV
find - fájlokat keres egy könyvtárstruktúrában

ÁTTEKINTÉS
find [útvonal...] [kifejezés]

LEÍRÁS
Ez a kézikönyv lap a find GNU változatát dokumentálja.

A find program a megadott fájloktól induló könyvtárfában keres a megadott kifejezés balról jobbra való kiértékelésével. A program által figyelembe vett precedenicaszabályokat lásd az OPERÁTOROK fejezetetben. Mihelyt egyértelmű, hogy egy fájl megfelel-e a kifejezésnek, a következő fájl vizsgálatába kezd. (Nem feltétlen értékeli ki tehát a teljes kifejezést. Pl. ha egy and kifejezés bal oldalán hamis, vagy egy or kifejezés bal oldalán igaz feltétel van, az egyértelművé teszi az egész kifejezés értékét. Ilyenkor a find nem vizsgálja tovább a kifejezést.)

Az első argumentum, amely `-', `(', `)', `,', vagy `!' jellel kezdődik jelenti a kifejezés elejét. Az ez előtti argumentumokat keresési útvonalaknak veszi a program, az ez utániakat a kifejezés további részeként. Ha nincs útvonal megadva, az aktuális könyvtárból indul a keresés. Ha pedig nincs kifejezés megadva, a `-print' lesz használva.

A find kilépési állapota 0 ha minden fájlt sikeresen feldolgozott, nagyobb, mint 0, ha valami hiba történt.

KIFEJEZÉSEK

A kifejezés opciókból, tesztekből és akciókból áll, melyeket operátorok választanak el egymástól. Az opciók a teljes műveletet befolyásolják, nemcsak egy fájlra vonatkoznak, és mindig igaz a visszatérési értékük. A tesztek igaz és hamis értéket egyaránt visszaadhatnak. Az akcióknak oldalhatásuk (side effect) van, és igaz vagy hamis értékkel is visszatérhetnek.

Az operátor elhagyható, ilyenkor az alapértelmezett -and kerül behelyettesítésre. Amennyiben a kifejezés a -prune -on kívül nem tartalmaz akciót, a -print lesz végrehajtva minden fájlra, melyre a kifejezés igaz.

OPCIÓK

Minden opció mindig igaz értéket ad vissza. Mindig hatnak, nemcsak akkor, amikor a feldolgozás eljut a helyükre. Ezért az áttekinthetőség kedvéért a kifejezés elejére célszerű tenni őket.

-daystart
    Az időpontokat (-amin, -atime, -cmin, -ctime, -mmin, és -mtime esete) a mai nap kezdetétől számítja, nem 24 órával ezelőttől.

-depth
    A könyvtárak feldolgozása előtt tartalmukat dolgozza fel.

-follow
    Nem a szimbolikus kötésekre hivatkozik, hanem az általuk mutatott fájlra. Bekapcsolja -noleaf-ot is.

-help, --help
    Egy összegzést ír ki a find használatáról, majd kilép.

-maxdepth levels
    Legfeljebb levels (ez egy nemnegatív szám) mélységben megy bele a könyvtárstruktúrába. `-maxdepth 0' azt jelenti, hogy csak a parancssorban argumentumként megadott fájlokra kell a teszteket és az akciókat végrehajtani.

-mindepth levels
    A levels-ben adott nemnegatív egésznél kisebb mélységben nem alkalmaz egyetlen tesztet vagy akciót sem. `-mindepth 1' azt jelenti, hogy a parancssori argumentumokat nem, csak az alattuk levő könyvtárakat dolgozza fel.

-mount
    Nem megy bele olyan alkönyvtárba, amely más fájlrendszeren van. Ugyanaz, mint -xdev. (Csak kompatibilitási okokból került implementálásra.)

-noleaf
    Nem használja azt a feltevést, hogy a könyvtárak kettővel kevesebb alkönyvtárat tartalmaznak, mint a kemény kötéseik száma. Erre olyankor van szükség, amikor a keresés olyan fájlrendszeren történik, amelyik nem követi a Unix könyvtárkonvencióit, mint pl. az MS-DOS vagy a CD-ROM-ok.

Unix alatt ugyanis minden könyvtárnak van két kemény kötése: a saját neve és a `.' bejegyzés. Továbbá, minden alkönyvtárának van egy `..' bejegyzése, amely rá vonatkozik. Ezért tehát a Unix-ban egy könyvtár kemény kötéseinek száma mindig kettővel több alkönyvtárainak számánál. Ennek felhasználásával a keresés Unix rendszereken jelentősen gyorsítható, mert a kemény kötések számánál kettővel kevesebb alkönyvtár megvizsgálása után nem kell továbbiakat keresni, azaz nem kell egy csomó másik fájlt vizsgálni, hisz azok biztosan normális, azaz "levél" (leaf) fájlok. Ez a feltételezés természetesen nem igaz más rendszerekben, így ott find kihagyhatna alkönyvtárakat.

-version, --version
    Kiírja a verziószámot és kilép.

-xdev
    Nem megy bele olyan alkönyvtárba, amely más fájlrendszeren van.

TESZTEK

Numerikus argumentumok az alábbi módon adhatók meg:

+n  nagyobb mint n,

-n  kisebb mint n,

n   pontosan n.

-amin n
    A fájl utoljára n perce lett használva.

-anewer file
    A fájl utolsó használata frissebb, mint a file módosítási dátuma. -anewer -t csak akkor befolyásolja a -follow, ha a -follow előbb szerepel a parancssorban, mint -anewer.

-atime n
    A fájl utoljára n*24 órája lett használva.

-cmin n
    A fájl státusza n perce lett utoljára módosítva.

-cnewer file
    A fájl utolsó státuszmódosítása frissebb, mint a file módosítási dátuma. -cnewer -t csak akkor befolyásolja a -follow, ha a -follow előbb szerepel a parancssorban, mint -cnewer.

-ctime n
    A fájl státusza utoljára n*24 órája lett módosítva.

-empty
    A fájl üres. (Szabályos fájlra és könyvtárra is vonatkozik.)

-false
    Mindig hamis

-fstype type
    A fájl type típusú fájlrendszeren van. Az érvényes fájlrendszer-típusok a Unix változataitól függenek. Egy nem teljes lista a Unix rendszerek alatt előforduló fájlrendszerekről: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. (Linux alatt a legjellemzőbbek: ext2, msdos, minix, iso9660, vfat.) A -printf a %F direktívával a fájlrendszer típusának megállapítására használható.

-gid n
    A fájl numerikus csoportazonosítója (group ID) n.

-group gname
    A fájl a gname csoporthoz tartozik. (Numerikus érték is megengedett.)

-ilname pattern
    Ugyanaz, mint -lname, csak nem tesz különbséget a kis- és nagybetűk között.

-iname pattern
    Ugyanaz, mint -name, csak nem tesz különbséget a kis- és nagybetűk között. Páldául a `fo*' és `F??' minták illeszkednek a `Foo', `FOO', `foo', `fOo' fájlnevekhez is.

-inum n
    A fájl inode száma n.

-ipath pattern
    Ugyanaz, mint -path, csak nem tesz különbséget a kis- és nagybetűk között.

-iregex pattern
    Ugyanaz, mint -regex, csak nem tesz különbséget a kis- és nagybetűk között.

-links n
    A fájlnak n kötése van.

-lname pattern
    A fájl egy szimbolikus kötés, melynek tartalma illeszkedik a pattern burokmintára. A metakarakterek nem kezelik a `/'-t és a `.'-t speciálisan.

-mmin n
    A fájl adatai utoljára n perce lettek módosítva.

-mtime n
    A fájl adatai utoljára n*24 órája lettek módosítva.

-name pattern
    A fájlnév alapja (azaz a fájl elérési útja a bevezető könyvtárak nélkül) illeszkedik a pattern burokmintához. A metakarakterek (`*', `?' és `[]') nem illeszkednek a fájl alapneve elején található `.'-hoz. Egy könyvtár és az alatta levő fájlok figyelmen kívül hagyására a -prune használható. (Lásd a -path leírásánál levő példát.)

-newer file
    A fájl frissebben lett módosítva, mint file. -newer -t csak akkor befolyásolja a -follow, ha a -follow előbb szerepel a parancssorban, mint -newer.

-nouser
    Nincs a fájl numerikus felhasználói azonosítójának (user ID) megfelelő felhasználó.

-nogroup
    Nincs a fájl numerikus csoportazonosítójának (group ID) megfelelő csoport.

-path pattern
    A fájlnév illeszkedik a pattern burokmintához. A metakarakterek nem kezelik `/'-t és `.'-t speciálisan. Például:
    find . -path './sr*sc'
    kinyomtat egy bejegyzést a './src/misc' könyvtárról, ha az létezik. Egy teljes könyvtárfa figyelmen kívül hagyásához a -prune használható a fa minden fájljának ellenőrzése helyett. Például a többi fájl nevének nyomtatása megvalósítható a következő módon:
    find . -path './src/emacs' -prune -o -print

-perm mode
    A fájl engedélybitjei pontosan a mode -nak megfelelőek. A mode megadása lehet oktális vagy szimbolikus. Szimbolikus esetben a 0 mód a kiindulás.

-perm -mode
    A mode minden engedélybitje be van állítva a fájlra is.

-perm +mode
    A mode engedélybitjeinek valamelyike be van állítva a fájlra is.

-regex pattern
    A fájlnév illeszkedik a pattern szabályos kifejezéshez. Az illeszkedés a teljes elérési útra vonatkozik, nem a keresésre. Például egy `./fubar3' fájlhoz való illeszkedésre használható a `.*bar.' vagy `.*b.*3' szabályos kifejezés, de a `b.*r3' nem.

-size n[bckw]
    A fájl mérete n egységnyi. Az egység az 512-bájtos blokk alapértelmezésben vagy `b' végződés esetén, bájt, ha a végződés `c', kilobájt, ha a végződés `k', 2-bájtos szó, ha a végződés `w'.

-true
    Mindig igaz.

-type c
    A fájl c típusú, ahol a lehetséges értékek:

    b   blokkos (pufferelt) speciális eszközfájl

    c   karakteres (nem pufferelt) speciális eszközfájl

    d   könyvtár

    p   csőhálózat (named pipe, FIFO)

    f   szabályos fájl

    l   szimbolikus kötés

    s   socket

-uid n
    A fájl numerikus felhasználói azonosítója (user ID) n.

-used n
    A fájl utoljára n nappal a státusza megváltoztatása után volt használatban.

-user uname
    A fájl a uname felhasználó tulajdonában van. (Numerikus érték is megengedett.)

-xtype c
    Ugyanaz, mint -type, hacsak nem a fájl szimbolikus kötés. Ebbean az esetben: ha -follow nem adott, akkor igaz az értéke amennyiben a fájl egy c típusú fájlra mutató link; amennyiben -follow is adott, igaz, ha c egyenlő `l'-lel. Más szavakkal: szimbolikus kötés esetén -xtype annak a fájlnak a típusát vizsgálja, amit -type nem vizsgál.

AKCIÓK

-exec command ;
    Végrehajtja a command parancsot. Értéke igaz, ha a parancs 0 státuszt ad vissza. A következő `;'-ig a find minden argumentumát a parancs argumentumának veszi. A `{}' string az aktuálisan feldolgozás alatt álló fájl nevével helyettesítődik. Ezen szerkezeteket esetlegesen meg kell védeni (a `\' használatával) attól, hogy a burok kifejtese őket. A parancs végrehajtása a kiindulási könyvtárból történik.

-fls file
    Igaz; ugyanaz, mint -ls, csak a file-ba ír. (Az -fprint -hez hasonlóan.)

-fprint file
    Igaz. A teljes fájlnevet a file fájlba írja. Amennyiben a file nem létezik a find futtatásakor, a find létrehozza, ha pedig létezik, csonkolja. A ``/dev/stdout'' és ``/dev/stderr'' fájlenevket speciálisan kezeli: a szabványos kimenetre és szabványos bemenetre vonatkoznak.

-fprint0 file
    Igaz; ugyanaz, mint -print0, csak azfile fájlba ír. (Az -fprint -hez hasonlóan.)

-fprintf file format
    Igaz; ugyanaz, mint -printf, csak azfile fájlba ír. (Az -fprint -hez hasonlóan.)

-ok command ;
    Ugyanaz, mint -exec, de először megkérdezi a felhasználót a standard bemeneten. Amennyiben a válasz nem `y'-nal vagy `Y'-nal kezdődik, nem futtatja a parancsot, és hamis értékkel tér vissza.

-print
    Igaz; a fájl teljes nevét, majd egy újsor-jelet a szabványos kimenetre írja.

-print0
    Igaz; a fájl teljes nevét, majd egy null-karaktert a standard kimenetre írja. Ez megengedi, hogy újsor-jelet tartalmazó fájlnevek esetén a find kimenetét feldolgozó programok jól működjenek.

-printf format
    Igaz; a format által megadott formátumban nyomtat a a standard kimenetre. Értelmezi a `\' és `%' direktívákat. Mezőszélesség és pontosság a C-beli `printf'-fel megegyező módon adható meg. A -print-től eltérően -printf nem ír ki automatikusan újsorjelet a kimenetre. A direktívák a következők lehetnek:

    \a  Figyelmeztető csengő (alarm bell).

    \b  Fordított törtvonal (backspace).

    \c  Ezen formátumból való nyomtatást megállítja és kiírja (flush) a kimenetet.

    \f  Soremelés (form feed).

    \n  Újsor (newline).

    \r  Kocsi vissza (carriage return).

    \t  Vízszintes tabulátor (horizontal tab).

    \v  Függőleges tabulátor (vertical tab).

    \\  Betű szerinti fordított törtvonal (literal backslash, `\').

    Egy `\', majed egy másik karakter rendes karakterként viselkedik, azaz mindegyik kinyomtatásra kerül.

    %%  Betű szerinti százalékjel.

    %a  A fálj utolsó elérési ideje a C `ctime' függvényének formátumában.

    %Ak A fálj utolsó elérési ideje a k által megadott formátumban. Ez lehet `@', vagy egy direktíva a C `strftime' függvényének megfelelően. k lehetséges értékeit a következőkben megadjuk. Néhány közülük nem minden rendszeren elérhető a `strftime' függvények rendszerfüggősége miatt.

        @   1970. január 1. 00:00 GMT óta eltelt másodpercek.

        Időmezők:

        H   óra (00..23)

        I   óra (01..12)

        k   óra ( 0..23)

        l   óra ( 1..12)

        M   perc (00..59)

        p   a `locale'-nak megfelelő AM vagy PM

        r   idő 12 órás formátumban (hh:mm:ss [AP]M)

        S   másodperc (00..61)

        T   idő 24 órás formátumban (hh:mm:ss)

        X   a `locale'-nak megfelelő időjelzés (H:M:S)

        Z   időzóna (pl. EDT) vagy semmi, ha az időzóna nem meghatározható

        Dátum mezők:

        a   a `locale'-nak megfelelő rövidített napnév (pl. Sun..Sat)

        A   a `locale'-nak megfelelő teljes napnév (pl. Sunday..Saturday)

        b   a `locale'-nak megfelelő rövidített hónapnév (pl. Jan..Dec)

        B   a `locale'-nak megfelelő teljes hónapnév (pl. January..December)

        c   a `locale'-nak megfelelő dátum és idő (pl. Sat Nov 04 12:02:33 EST 1989)

        d   a hónap napja (01..31)

        D   dátum (mm/dd/yy)

        h   ugyanaz, mint b

        j   az év napja (001..366)

        m   hónap (01..12)

        U   az év hányadik hetéről van szó, ha vasárnappal kezdjük a heteket (00..53)

        w   a hét hányadik napja (0..6)

        W   az év hányadik hetéről van szó, ha hétfővel kezdjük a heteket (00..53)

        x   a `locale'-nak megfelelő dátum (pl. mm/dd/yy)

        y   az év utolsó két jegye (00..99)

        Y   év (1970...)

    %b  A fájlméret 512 bájtos blokkokban (felkerekítve).

    %c  A fájl státuszának utolsó megváltoztatási ideje a C `ctime' függvényének formátumában.

    %Ck A fájl státuszának utolsó megváltoztatási ideje a k formátum által megadott módon (%A-hoz hasonlóan).

    %d  A fájl mélysége a könyvtárfában. A 0 azt jelenti, hogy a fájl parancssori argumentum volt.

    %f  A fájl neve a bevezető könyvtárnevek nélkül.

    %F  A fájlrendszer neve. Ez az érték használható az -fstype-nál.

    %g  A fájl csoportneve vagy a numerikus csoportazonosító, ha nincs neve a csoportnak.

    %G  A fájl numerikus csoportazonosítója.

    %h  A teljes fájnév bevezető könyvtárnevei.

    %H  Azon parancssori argumentumok, melyek alatt nem talált fájlt a find.

    %i  A fájl inode száma decimálisan.

    %k  A fájl mérete 1K blokkokban (felkerekítve).

    %l  A szimbolikus kötés célja. (Üres, ha a fájl nem szimbolikus kötés.)

    %m  A fájl engedélybitjei oktálisan.

    %n  A fájl kemény kötéseinek száma.

    %p  A fájl (teljes) neve.

    %P  A fájl neve azon parancssori argumentum nélkül, amely alatt megtalálta a find.

    %s  A fájl mérete bájtokban.

    %t  A fájl utolsó módosítási ideje a C `ctime' függvényének formátumában.

    %Tk A fájl utolsó módosítási ideje a k által megadott formában. (Lásd %A-nál.)

    %u  A fájl tulajdonosának neve, vagy numerikus felhasználói azonosítója, ha nincs neve a felhasználónak.

    %U  A fájl tulajdonosának numerikus felhasználói azonosítója.

    A `%' jel után álló bármely más karakter esetén csak a megadott karakter íródik ki.

-prune
    Ha nincs -depth megadva, akkor igaz. Nem megy bele az aktuális könyvtárba.
    Ha -depth adott, akkor hamis és nincs hatása.

-ls Igaz. listázza az aktuális fájlt `ls -dils' formában a standard kimenetre. A blokkméret 1K, hacsak nem a POSIXLY_CORRECT környezeti változónak értéket adtunk. Ekkor 512 bájtos blokkmérettel számol.

OPERÁTOROK

Az operátorokat csökkenő precedenciasorrendben listázzuk:

( expr )
    Precedencia változtatás.

! expr
    Igaz, ha az expr kifejezés hamis.

-not expr
    Ugyanaz, mint ! expr.

expr1 expr2
    Logikai és. Nem értékeli ki expr2-t, ha expr1 hamis.

expr1 -a expr2
    Ugyanaz, mint expr1 expr2.

expr1 -and expr2
    Ugyanaz, mint expr1 expr2.

expr1 -o expr2
    Logikai vagy. expr2-t nem értékeli ki, ha expr1 igaz.

expr1 -or expr2
    Ugyanaz, mint expr1 -o expr2.

expr1 , expr2
    Listáz. expr1 és expr2 is mindig kiértékelésre kerül. expr1 értéke nem számít, a lista expr2 értékét adja vissza.

LÁSD MÉG
locate(1), locatedb(5), updatedb(1), xargs(1) Finding Files (Info fájl, vagy nyomtatott változat)

MAGYAR FORDÍTÁS
Horváth András <horvatha@rs1.szif.hu>