find - fájlokat keres egy
könyvtárstruktúrában
ÁTTEKINTÉS
find [útvonal...] [kifejezé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.
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.
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.
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.
- -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.
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.
Horváth András <horvatha@rs1.szif.hu>