пРЙУБОЙЕ:љ хФЙМЙФБ find(1) ОЕЪБНЕОЙНБ РТЙ РПЙУЛЕ ЖБКМПЧ У ЪБДБООЩНЙ РБТБНЕФТБНЙ. лБОДЙДБФ BSDA ДПМЦЕО УЧПВПДОП ЧМБДЕФШ ЕА. оБ ЬЛЪБНЕОЕ ЕЗП НПЗХФ РПРТПУЙФШ ОБКФЙ ЖБКМ У ЪБДБООЩН РПУМЕДОЙН ЧТЕНЕОЕН ЙЪНЕОЕОЙС, ТБЪНЕТПН, ФЙРПН, ЖБКМПЧЩНЙ ЖМБЗБНЙ, UID, GID, РЕТНЙУУЙСНЙ ЙМЙ УПДЕТЦБЭЙН Ч ОБЪЧБОЙЙ ЛБЛПК-ФП ЫБВМПО.
рТБЛФЙЛБ:љfind(1)
лПНБОДБ find(1) РТЕДОБЪОБЮЕОБ ДМС РПЙУЛБ ЖБКМПЧ РП ЪБДБООПНХ ЛТЙФЕТЙА. жПТНБФ ЛПНБОДЩ:
find [ПРГЙЙ] ЗДЕ_ЙУЛБФШ [ЮФП ЙУЛБФШ (ХУМПЧЙС)] [ДЕКУФЧЙЕ]
пРГЙЙ НПЗХФ ВЩФШ ТБЪМЙЮОЩЕ, ПОЙ ТЕЗХМЙТХАФ РПЧЕДЕОЙЕ
find(1) РТЙ РПЙУЛЕ. л ФПНХ ЦЕ ПОЙ Ч ТБЪОЩИ
ЧЕТУЙСИ Й Ч ТБЪОЩИ УЙУФЕНБИ ТБЪОЩЕ. фБЛ, ОБРТНЕТ, ПРГЙС
-E
, ЙЪНЕОСАЭБС УЙОФБЛУЙУ ТЕЗХМСТОЩИ ЧЩТБЦЕОЙК Ч
ПРГЙСИ -regex
Й -iregex
РПДПВОП БОБМПЗЙЮОПК ПРГЙЙ Ч grep(1), ЙНЕЕФУС
ФПМШЛП Ч FreeBSD.
рПЦБМХК ЧБЦОП ЪОБФШ ПРГЙА -x
. пОБ РТЕДПФЧТБЭБЕФ
РПЙУЛ ОБ ХУФТПКУФЧБИ ПФМЙЮОЩИ ПФ ХУФТПКУФЧБ, У ЛПФПТПЗП РПЙУЛ
ОБЮБМУС. оБРТЙНЕТ:
find -x /home/user
ьФБ ЛПНБОДБ ЧЩЧЕДЕФ УРЙУПЛ ЧУЕИ ЖБКМПЧ Ч ДПНБЫОЕН ЛБФБМПЗЕ
РПМШЪПЧБФЕМС user Й ЧП ЧУЕИ РПДЛБФБМПЗБИ, ЛТПНЕ ЛБФБМПЗПЧ
СЧМСАЭЙИУС ФПЮЛБНЙ НПОФЙТПЧБОЙС ДТХЗЙИ ХУФТПКУФЧ
(/home/user/mnt/floppy
,
/home/user/mnt/cdrom
,
/home/user/mnt/nfs
).
рХФШ ОБДП ХЛБЪЩЧБФШ ПВСЪБФЕМШОП. оЕЛПФПТЩЕ ЧЕТУЙЙ
GNU find РТПЧПДСФ РПЙУЛ
ПФОПУЙФЕМШОП ФЕЛХЭЕЗП ЛБФБМПЗБ, ЕУМЙ ЙН ОЕ ХЛБЪБФШ РХФШ,
find Ч BSD ФТЕВХЕФ СЧОПЗП ХЛБЪБОЙС РХФЙ. ч
ПУПВЩИ УМХЮБСИ, ЛПЗДБ РХФШ, Ч ЛПФПТПН ОБДП РТПЙЪЧПДЙФШ РПЙЛ
ЙНЕЕФ ОЕПВЩЮОПЕ ЙНС, НПЦОП ХЛБЪБФШ ЕЗП ЛБЛ БТЗХНЕОФ ПРГЙЙ
-f
.
хУМПЧЙС ДМС РПЙУЛБ ЪБДБАФУС ПРГЙСНЙ, РЕТЕЮЙУМЕООЩНЙ ОЙЦЕ. рТЙ
ЪБДБОЙЙ ОЕУЛПМШЛЙИ ПРГЙК, ПОЙ ПВЯЕДЙОСАФУС ЮЕТЕЪ ПРЕТБФПТ
«Й». уЧСЪЛХ «Й» НПЦОП ЪБДБФШ СЧОП ЙУРПМШЪХС
ПРГЙА -and
. уЧСЪЛБ «ЙМЙ» ЪБДБЈФУС
ПРГЙЕК -or
. хОБТОПЕ ПФТЙГБОЙЕљ—
!
Й УЙНЧПМЩ ЗТХРРЙТПЧЛЙљ—
(...)
, Ч sh Й
csh ОЕПВИПДЙНП ЪБЭЙЭБФШ ЙУРПМШЪХС МЙВП
ЛБЧЩЮЛЙ, МЙВП \.
-amin n
-cmin n
-mmin n
n
НЙОХФ. ъДЕУШ РПД ЧТЕНЕОЕН ЖБКМБ ЙНЕЕФУС ЧЧЙДХ:
-amin
љ— access time (ЧТЕНС
РПУМЕДОЕЗП ДПУФХРБ Л ЖБКМХ),
-cmin
љ— change of file status
information (ЧТЕНС ЙЪНЕОЕОЙС ЙОЖПТНБГЙЙ П УПУФПСОЙЙ ЖБКМБ)
-mtime
љ— modification time
(ЧТЕНС ЙЪНЕОЕОЙС ЖБКМБ)
-anewer file
-cnewer file
-mnewer file
-anewer
љ— access time (ЧТЕНС
РПУМЕДОЕЗП ДПУФХРБ Л ЖБКМХ),
-cnewer
љ— change of file
status information (ЧТЕНС ЙЪНЕОЕОЙС ЙОЖПТНБГЙЙ П УПУФПСОЙЙ
ЖБКМБ) -mnewer
љ— modification
time (ЧТЕНС ЙЪНЕОЕОЙС ЖБКМБ)
-atime n
-ctime n
-mtime n
хУМПЧЙЕ ЙУФЙООП, ЕУМЙ ТБЪОЙГБ НЕЦДХ ЧТЕНЕОЕН ЛПЗДБ ВЩМ
ЪБРХЭЕО РПЙУЛ Й ЧТЕНЕОЕН ЖБКМБ ПЛТХЗМЈООБС ЧЧЕТИ, Ч
ФПЮОПУФЙ n
УХФПЛ. ъДЕУШ РПД ЧТЕНЕОЕН
ЖБКМБ ЙНЕЕФУС ЧЧЙДХ: -amin
љ—
access time (ЧТЕНС РПУМЕДОЕЗП ДПУФХРБ Л ЖБКМХ),
-cmin
љ— change of file status
information (ЧТЕНС ЙЪНЕОЕОЙС ЙОЖПТНБГЙЙ П УПУФПСОЙЙ ЖБКМБ)
-mtime
љ— modification time
(ЧТЕНС ЙЪНЕОЕОЙС ЖБКМБ)
х ЧТЕНЕОЙ НПЦОП ЪБДБЧБФШ ЪОБЛ:
-mtimeљ-7
љ— ЙЭЕН ЖБКМЩ
ЙЪНЕОЈООЩЕ ЪБ РПУМЕДОАА ОЕДЕМА,
-mtimeљ+7
љ— ЙЭЕН ЖБКМЩ
ОЕ НЕОСЧЫЙЕУС Ч ФЕЮЕОЙЕ ОЕДЕМЙ.
ч FreeBSD ЙНЕЕФУС ТБУЫЙТЕОЙЕ
УЙОФБЛУЙУБ: ПРГЙСН -atime
,
-ctime
Й -mtime
НПЦОП
ХЛБЪЩЧБФШ ЧТЕНС У ТБЪНЕТОПУФША Ч УЕЛХОДБИ, НЙОХФБИ, ЮБУБИ,
ДОСИ Й ОЕДЕМСИ. оБРТЙНЕТ 2s
,
3m
, 4h
,
5d
, 6w
. нПЦОП
ЛПНВЙОЙТПЧБФШ ТБЪНЕТОПУФЙ:
5d6w
љ— ЫЕУФШ ОЕДЕМШ Й РСФШ
ДОЕК.
ч OpenBSD Й NetBSD
ДМС БОБМПЗЙЮОПЗП РПЙУЛБ РТЙДЈФУС РПМШЪПЧБФШУС ПРГЙСНЙ
-amin
, -cmin
Й
-mmin
, РЕТЕЧПДЙФШ ЧТЕНС Ч НЙОХФЩ Й
ЙУРПМШЪПЧБФШ ЗДЕ ОБДП ПФТЙГБОЙЕ !
.
-newer file
-newerXY file
пРГЙС ЕУФШ ФПМШЛП Ч FreeBSD!
хУМПЧЙЕ ЙУФЙООП, ЕУМЙ ОБКДЕООЩК ЖБКМ ЙНЕЕФ ВПМШЫЕЕ ЧТЕНС
ДПУФХРБ (X=a
), ЙЪНЕОЕОЙС УФБФХУБ
(X=c
), НПДЙЖЙЛБГЙЙ (X=m
)
ХЛБЪБООПЗП ЮЕН ЧТЕНС ДПУФХРБ (Y=a
),
ЙЪНЕОЕОЙС УФБФХУБ (Y=c
), НПДЙЖЙЛБГЙЙ
(Y=m
) Х ХЛБЪБООПЗП ЖБКМБ.
-empty
-flags [-] flags
-
ОЕ ХЛБЪБО, ХУМПЧЙЕ ЙУФЙООП, ЕУМЙ ЖМБЗЙ
Ч ФПЮОПУФЙ УППФЧЕФУФЧХАФ ХЛБЪБООЩН. еУМЙ ЪОБЛ
-
ХЛБЪБО, ХУМПЧЙЕ УПЧРБДБЕФ, ЕУМЙ ЛБЛ
НЙОЙНХН ХЛБЪБООЩЕ ЖМБЗЙ РТЙУХФУФЧХАФ.
-perm [-] mode
-
ЙНЕЕФ ФП ЦЕ
ЪОБЮЕОЙЕ, ЮФП Й Ч ПРГЙЙ -flags
.
-group group
, -user user
-nogroup
, -nouser
-type type
хУМПЧЙЕ ЙУФЙООП, ЕУМЙ ОБКДЕООЩК ЖБКМ ЙНЕЕФ ХЛБЪБООЩК ФЙР. чПЪНПЦОЩЕ ФЙРЩ ЖБКМБ:
b | block special | ВМПЮОПЕ ХУФТПКУФЧП |
c | character special | УЙНЧПМШОПЕ ХУФТПКУФЧП |
d | directory | ЛБФБМПЗ |
f | regular file | ПВЩЮОЩК ЖБКМ |
l | symbolic link | УЙНЧПМШОБС УУЩМЛБ |
p | FIFO | ЙНЕОПЧБООЩК ЛБОБМ |
s | soket | УПЛЕФ |
-fstype type
local
Й
rdonly
.
-[i]name pattern
*
,
?
Й []
. пРГЙС
-iname
ПФМЙЮБЕФУС ФЕН, ЮФП ЙЗОПТЙТХЕФ
ТЕЗЙУФТ.
-[i]path pattern
*
,
?
Й []
.
/
УЮЙФБЕФУС ПВЩЮОЩН УЙНЧПМПН. чБТЙБОФ
ОЕЮХЧУФЧЙФЕМПШОЩК Л ТЕЗЙУФТХ ТЕБМЙЪПЧБО Ч
FreeBSD Й NetBSD.
-[i]regex pattern
пРГЙС ОЕ ТЕБМЙЪПЧБОБ Ч OpenBSD!
хУМПЧЙЕ ЙУФЙООП, ЕУМЙ ЙНС ЖБКМБ (ЧНЕУФЕ У РХФЈН) РПМОПУФША
УППФЧЕФУФЧХЕФ ТЕЗХМСТОПНХ ЧЩТБЦЕОЙА
pattern
. юФП ЪОБЮЙФ РПМОПУФША? ыБВМПО
foo
ОЕ УППФЧЕФУФЧХЕФ РХФЙ
./foo/bar
, Б .*foo.*
УППФЧЕФУФЧХЕФ. чБТЙБОФ
-iregex
ОЕЮХЧФЧЙФЕМЕО Л ТЕЗЙУФТХ.
-size n[c]
n
ВМПЛПЧ РП 512 ВБКФ. чОЙНБОЙЕ! ЛПНБОДБ
find(1) ОЕ ЙУРПМШЪХЕФ РЕТЕНЕООХА
ПЛТХЦЕОЙС BLOCKSIZE
. еУМЙ ХЛБЪБО
УХЖЖЙЛУ c
, ФП ТБЪНЕТ ВЕТЈФУС ФПЮОП Ч
ВБКФБИ. фБЛ ЦЕ ЛБЛ Й Ч УМХЮБЕ У ПРГЙЕК
-atime
НПЦОП ЪБДБЧБФШ ЪОБЛ:
-sizeљ-1024c
љ— ЙУЛБФШ
ЖБКМЩ ТБЪНЕТПН НЕОШЫЕ ЛЙМПВБКФБ.
-maxdepth n
Й -mindepth n
-maxdepthљ1
ЙУЛБФШ ЖБКМЩ ФПМШЛП Ч ФЕЛХЭЕН ЛБФБМПЗЕ, ОЕ РПЗТХЦБСУШ Ч
РПДЛБФБМПЗЙ.
рТПУФЕКЫЕЕ ДЕКУФЧЙЕљ— ОБРЕЮБФБФШ ЙНС ЖБКМБ ОБ
STDOUT
. ьФП ДЕКУФЧЙЕ РП ХНПМЮБОЙА
РТЕДРТЙОЙНБЕФУС ЕУМЙ ОЙЮЕЗП ДТХЗПЗП ОЕ ХЛБЪБОП. пОП ЬЛЧЙЧБМЕОФОП
ХЛБЪБОЙА ПРГЙЙ -print
.
-print
-print0
-ls
-dgils
.
-delete
пРГЙС ЕУФШ ФПМШЛП Ч FreeBSD!
хДБМЙФШ ОБКДЕООЩЕ ЖБКМЩ Й ДЙТЕЛФПТЙЙ.
-exec ЛПНБОДБ [ПРГЙЙ [{}]] ;
{}
, ФП ПОБ ВХДЕФ ЪБНЕОЕОБ ЙНЕОЕН ЖБКМБ (У
РХФЈН). уЙНЧПМ ;
ПЪОБЮБЕФ, ЮФП Ч ЬФПН
НЕУФЕ ЪБЛПОЮЙМБУШ ЛПНБОДБ Й ЕЈ ПРГЙЙ.
-execdir ЛПНБОДБ [ПРГЙЙ [{}]] ;
-exec
, ОП РТЙ ЧЩРПМОЕОЙЙ
ЛПНБОДЩ find(1) РЕТЕИПДЙФ Ч ЛБФБМПЗ,
ЗДЕ ОБИПДЙФУС ЖБКМ, Б {}
ЪБНЕОСЕФ ОБ ЙНС
ЖБКМБ ВЕЪ РХФЙ.
-ok ЛПНБОДБ [ПРГЙЙ [{}]] ;
-exec
, ОП РЕТЕД ЧЩРПМОЕОЙЕН
ЛПНБОДЩ find(1) ЪБРТБЫЙЧБЕФ
РПДФЧЕТЦДЕОЙЕ Х РПМШЪПЧБФЕМС.
-exec ЛПНБОДБ [ПРГЙЙ [{}]] +
пРГЙС ЕУФШ ФПМШЛП Ч FreeBSD!
ьЛЧЙЧБМЕОФОБ ПРГЙЙ -exec ... ;
, ОП
ЪБНЕЭБЕФ {}
ОЕ ПДОЙН ОБКДЕООЩН ЖБКМПН, Б
УРЙУЛПН ЖБКМПЧ. фБЛЙН ПВТБЪПН, ХЛБЪБООБС ЛПНБОДБ
ЧЩЪЩЧБЕФУС МЙЫШ ПДОБЦДЩ. ьФП ТБВПФБЕФ ЛБЛ ЦЕ, ЛБЛ УЧСЪЛБ У
ЛПНБОДПК xargs(1).
xargs [ПРГЙЙ] ЛПНБОДБ У БТЗХНЕОФБНЙ
лПНБОДБ xargs(1) ЮЙФБЕФ УРЙУПЛ ЖБКМПЧ ЙЪ УЧПЕЗП
STDIN
Й РПДУФБЧМСЕФ ЬФЙ ЖБКМЩ Ч ЛБЮЕУФЧЕ
БТЗХНЕОФБ ЛПНБОДЕ ХЛБЪЩЧБЕНПК ЕК Ч БТЗХНЕОФЕ. еЈ ХДПВОП
РТЙНЕОСФШ Ч УЧСЪЛЕ У find(1). оБРТЙНЕТ, РХУФШ
ОБН ОБДП ХЪОБФШ УЛПМШЛП УФТПЛ Ч ЛБЛПН ЙЪ ЦХТОБМШОЩИ ЖБКМПЧ ОБ
ОБЫЕК УЙУФЕНЕ.
$
find /var/log \! -name *bz2 -type f | xargs wc -l
875 /var/log/auth.log
125 /var/log/cron
270 /var/log/debug.log
.....
ъОБЛ \
РЕТЕД !
НЩ РПУФБЧЙМЙ ДМС ФПЗП, ЮФПВЩ sh ОЕ
ЙОФЕТРТЕФЙТПЧБМ ЕЗП РП-УЧПЕНХ. бОБМПЗЙЮОПЗП ТЕЪХМШФБФБ НЩ НПЗМЙ
ВЩ ДПВЙФШУС ЙУРПМШЪХС ПРГЙА -exec
.
$
find /var/log \! -name *bz2 -type f -exec wc -l {} \;
875 /var/log/auth.log
125 /var/log/cron
270 /var/log/debug.log
.....
дБЦЕ ОБ УПЧТЕНЕООПК, ВЩУФТПДЕКУФЧХАЭЕК НБЫЙОЕ ТБЪОЙГБ Ч ЧЩРПМОЕОЙЙ ЬФЙИ ДЧХИ ЛПНБОД ЧЙДОБ ОЕЧППТХЦЈООЩН ЧЪЗМСДПН. нЩ НПЦЕН ЕЈ ЙЪНЕТЙФШ:
$
time find /var/log \! -name *bz2 -type f | xargs wc -l > /dev/null real 0m0.032s user 0m0.000s sys 0m0.024s$
time find /var/log \! -name *bz2 -type f -exec wc -l {} \; > /dev/null real 0m0.242s user 0m0.040s sys 0m0.191s
тБЪОЙГБ УПУФБЧЙМБ ГЕМЩК РПТСДПЛ. б ЧЕДШ ЪДЕУШ ЕЭЈ НБМП ЖБКМПЧ. ч
ЮЈН ЦЕ ДЕМП? б ДЕМП Ч ФПН, ЮФП find(1) У
ПРГЙЕК -exec
ДМС ЛБЦДПЗП ОБКДЕООПЗП ЖБКМБ
ЪБОПЧП ЧЩЪЩЧБЕФ ЛПНБОДХ wc(1). чЩЪПЧ ЛПНБОД Ч
UNIX (Й ОЕ ФПМШЛП Ч ОЈН)љ— ПЮЕОШ
ДПТПЗБС РТПГЕДХТБ. ч УМХЮБЕ У ЙУРПМШЪПЧБОЙЕН
xargs(1), НЩ ЧЩЪЧБМЙ wc(1)
ФПМШЛП ПДЙО ТБЪ. рПДУЮЈФ УФБФЙУФЙЛЙ УЧСЪБООЩК У ЮФЕОЙЕН Й
БОБМЙЪПН УПДЕТЦЙОПЗП ЖБКМБ ВПМЕЕ РТПУФ, ЮЕН УБН ЧЩЪПЧ
wc(1).
еЭЈ ПЮЕОШ РПМЕЪОПК ПУПВЕООПУФША xargs(1),
СЧМСЕФУС ФП, ЮФП ПО НПЦЕФ ТБЪВЙТБФШ УРЙУПЛ ЖБКМПЧ У
STDIN
, УЮЙФБС УЙНЧПМПН ТБЪДЕМЙФЕМЕН ОЕ
РТПВЕМ, Б ОХМЕЧПК УЙНЧПМ, ЛПФПТПЗП Ч РТЙОГЙРЕ ОЕ НПЦЕФ ВЩФШ Ч
ЙНЕОЙ ЖБКМБ. ьФП НПЦЕФ ВЩФШ ПЮЕОШ ЧБЦОП, ОБРТЙНЕТ, РТЙ ТБВПФЕ У
ТБЪДЕМБНЙ Windows ЙМЙ Macintosh.
$
find /mnt/samba ... -print0 | xargs -0 ...
фЕРЕТШ, ЛБЛЙЕ ВЩ РТЙЮХДМЙЧЩЕ ЙНЕОБ ОЙ ЧУФТЕФЙМЙУШ ОБН, ДБЦЕ ЕУМЙ ПОЙ УПДЕТЦБФ ЛБЧЩЮЛЙ, РТПВЕМЩ, УЙНЧПМЩ ЛПОГБ УФТПЛЙ, ПОЙ ВХДХФ ПВТБВПФБОЩ ЛПТТЕЛФОП.