ako pracuje "find"?
ivop na regionet.cz
ivop na regionet.cz
Čtvrtek Květen 24 17:00:02 CEST 2001
Jan Marek wrote:
>
> Dobry den,
>
> On Thu, May 24, 2001 at 03:34:15PM +0200, Michal Weinfurtner wrote:
> > mgr Jan Obdrzalek wrote:
> >
> > > > > [root in ~]# cd /
> > > > > [root in /]# find /usr -name grip*
> > > >
> > > > find /usr -name grip\*
> > > >
> > > > Musite zajistit, aby hvezdicku nespolknul shell (udela
> > > > expanzi podle obsahu aktualniho adresare).
> > >
> > > EHM... to by asi hledalo soubory, se jmenem dlouhym 5
> > > znaku, z nich posledni je hvezdicka a zadny takovy by
> > > nenaslo ....
> >
> > Mrknete do man bash a vyhledejte heslo "Pathname Expansion" a bude vam to
> > jasne !
>
> Mozna delam neco spatne, ale pokud si vlezu do root adresare a
> zadam si coby root prikaz:
>
> find / -name qmai* -print
>
> Tak mi to najde to stejne jako
>
> find / -name qmai\* -print
>
> find --version
> GNU find version 4.1.6
> (na mem Debian-u)
>
> pricemz v korenovem adresari nemam o qmail-u zminku a v obou
> pripadech mi to vyhleda i soubory jmena qmail-inject apod.
>
> Pokud ovsem zadam:
>
> find / -name qmai -print
>
> nenajde nic...
>
> To jen takove experimentalni overeni... Doufam, ze to usmiri
> zastance escapovani i zastance setreni klavesy '\' ;-)))
Mno, duvod je jednoduchy: shell expanduje command line tak,
ze se qmai* snazi nahradit temi expanzemi = soubory, ktere tomu
odpovidaji. Pokud zadny takovy nenajde, ponecha tam ZNAKY qmai*
a ty se tak dostanou az k programu find. Pokud napisete 'qmai*'
nebo qmai\*, (tj. apostrofy nebo backslash), tak to shell
expandovat nebude urcite a da to findovi rovnou, ovsem sezere
ten backslash nebo ty apostrofy. Jinymi slovy, jste si jist, co to
udela, kdezto v prvnim pripade vysledek zalezi na obsahu
aktualniho adresare.
To je definovane (a popsane) chovani shellu (pocinaje sh)
uz velmi dlouho ( > 11 let zcela jiste, z te doby pochazeji
me poznamky na toto tema).
Proto taky pouzivam v shell-scriptech nasledujici obrat:
for i in *.txt
do
[ -f $i ] || continue
# tady je v $i opravdu existujici soubor
done
Zdravim,
Ivo Panacek
PS: Mozna bych jeste nasel sve zdrojaky k programu find,
bylo to psano v Turbo Pascalu, tusim ze 4 nebo 5,
a slapalo to v DOSu.
--
E-mail: Ivo.Panacek na regionet.cz
WWW: http://ivop.regionet.cz
Mobile: +420 602 337776
Další informace o konferenci Linux