% Linux Installation and Getting Started    -*- TeX -*-
% wildcard.tex
% Copyright (c) 1992, 1993 by Matt Welsh, Larry Greenfield and Karl Fogel
%
% This file is freely redistributable, but you must preserve this copyright 
% notice on all copies, and it must be distributed only as part of "Linux 
% Installation and Getting Started". This file's use is covered by
% the copyright for the entire document, in the file "copyright.tex".
%
% Copyright (c) 1998 by Specialized Systems Consultants Inc. 
% <ligs@ssc.com>

\section{Džokerji}
%\markboth{Učbenik Linuxa}{Džokerji}

\index{ukazne lupine!znaki džokerji za|(}
\index{dz~oker@džoker!v imenih datotek|(}
\index{imena datotek!džokerji v|(}
\index{dz~oker@džoker!definicija}
Glavna značilnost večine ukaznih lupin Linuxa je zmožnost sklicevanja
na več kot eno datoteko z uporabo posebnih znakov.  Ti \textbf{džokerji}
(angl.\ wildcards) vam omogočajo sklicevanje na, denimo, vsa imena
datotek, ki vsebujejo znak >>\texttt{n}<<.

\index{*@\texttt{*}}
\index{dz~oker@džoker!*@\texttt{*}}
Džoker >>\texttt{*}<< lahko zamenja katerikoli znak ali niz znakov v
imenu datoteke.  Ko v imenu datoteke uporabite znak >>\texttt{*}<<, ga
ukazna lupina zamenja z vsemi mogočimi zamenjavami iz imen datotek, ki
so v imeniku, v katerem se sklicujete.

Tukaj je preprost primer.  Denimo, da ima Larry v svojem trenutnem
imeniku datoteke \texttt{frog}, \texttt{joe} in \texttt{stuff}.
\begin{tscreen}
/home/larry\$ \emph{ls} \\
frog\ \ \ \ \ joe\ \ \ \ \ stuff \\
/home/larry\$
\end{tscreen}

Za določitev vseh datotek, katerih ime vsebuje črko >>o<<, uporabite
ukaz
\begin{tscreen}
/home/larry\$ \emph{ls *o*} \\
frog\ \ \ \ \ joe \\
/home/larry\$
\end{tscreen}
Kot lahko vidite, je vsaka pojavitev >>\texttt{*}<< zamenjana z
vsemi nadomestitvami, ki ustrezajo džokerju iz imen datotek
v trenutnem imeniku.

Uporaba samega znaka >>\texttt{*}<< preprosto ustreza vsem imenom
datotek, saj vsi znaki ustrezajo džokerju.
\begin{tscreen}
/home/larry\$ \emph{ls *} \\
frog\ \ \ \ \ joe\ \ \ \ \ stuff \\
/home/larry\$
\end{tscreen}

Tukaj je še nekaj več primerov:
\begin{tscreen}
/home/larry\$ \emph{ls f*} \\
frog \\
/home/larry\$ \emph{ls *ff} \\
stuff \\
/home/larry\$ \emph{ls *f*} \\
frog\ \ \ \ \ stuff \\
/home/larry\$ \emph{ls s*f} \\
stuff \\
/home/larry\$ 
\end{tscreen}

\index{dz~oker@džoker!razvitje}
\index{ukazne lupine!razvitje džokerjev}
Proces spremembe >>\texttt{*}<< v seznam imen datotek se imenuje
\textbf{razvitje džokerjev} (angl.\ wildcard expansion) in ga opravi
ukazna lupina.  To je pomembno: posamezen ukaz, kot je
\texttt{ls},\emph{nikoli} ne vidi >>\texttt{*}<< v svojem seznamu
parametrov.  Ukazna lupina razvije džoker tako, da vključi vsa imena
datotek, ki mu ustrezajo.  Torej ukaz
\begin{tscreen}
/home/larry\$ \emph{ls *o*}
\end{tscreen}
razvije ukazna lupina v ukaz
\begin{tscreen}
/home/larry\$ \emph{ls frog joe}
\end{tscreen}

\index{datoteke!skrite!ki ne ustrezajo džokerjem}
Pomembno opozorilo o džokerju >>\texttt{*}<<: ta \emph{ne} ustreza
imenom datotek, ki se začenjajo s piko (>>\texttt{.}<<).  Te datoteke
veljajo za \textbf{skrite} datoteke -- čeprav niso zares skrite,
se ne prikažejo v običajnih izpisih programa \texttt{ls} in jih
uporaba džokerja >>\texttt{*}<< ne zadeva.

Tukaj je primer.  Omenili smo že, da vsak imenik vsebuje dva posebna
vnosa: >>\texttt{.}<< se nanaša na trenutni imenik, in >>\texttt{..}<<
na starševski imenik.  Vendar ko uporabljate \texttt{ls}, se ta dva
vnosa ne prikažeta.
\begin{tscreen}
/home/larry\$  \emph{ls} \\
frog\ \ \ \ \ joe\ \ \ \ \ stuff \\
/home/larry\$ 
\end{tscreen}
Če uporabite stikalo \texttt{-a} ukaza \texttt{ls}, pa lahko prikažete
imena datotek, ki se začenjajo s piko.  Poglejte:
\begin{tscreen}
/home/larry\$ \emph{ls -a} \\
.\ \ \ \ \ ..\ \ \ \ \ .bash\_profile\ \ \ \ \ .bashrc\ \ \ \ \ frog
\ \ \ \ \ joe\ \ \ \ \ stuff \\
/home/larry\$ 
\end{tscreen}
Seznam vsebuje dva posebna vnosa, >>\texttt{.}<< in >>\texttt{..}<<,
kot tudi dve drugi >>skriti<< datoteki -- \texttt{.bash\_profile} in
\texttt{.bashrc}.  Ti dve datoteki sta začetni datoteki, ki ju
uporablja \texttt{bash}, ko se \texttt{larry} prijavi v sistem.
Opisani sta od strani~\pageref{sec-init-scripts} naprej.

Upoštevajte, da se ob uporabi džokerja >>\texttt{*}<< ne prikaže
nobeno ime datoteke, ki se začne z >>\texttt{.}<<.
\begin{tscreen}
/home/larry\$ \emph{ls *} \\
frog\ \ \ \ \ joe\ \ \ \ \ stuff \\
/home/larry\$ 
\end{tscreen}
To je varnostna lastnost: če bi znak >>\texttt{*}<< ustrezal imenom
datotek, ki se začnejo z >>\texttt{.}<<, bi tudi ustrezal imenom
imenikov >>\texttt{.}<< in >>\texttt{..}<<.  To je lahko pri uporabi
nekaterih ukazov nevarno.

\index{dz~oker@džoker!?@\texttt{?}}
\index{?@\texttt{?}}
Še en džoker je >>\texttt{?}<<.  Džoker >>\texttt{?}<< se lahko
zamenja v en sam znak.  Torej, >>\texttt{ls ?}<< prikaže vsa imena
datotek z enim samim znakom.  In >>\texttt{ls termca?}<< bi
prikazalo >>\texttt{termcap}<< a \emph{ne tudi} >>\texttt{termcap.backup}<<.
Tukaj je še en primer:
\begin{tscreen}
/home/larry\$ \emph{ls j?e} \\
joe \\
/home/larry\$ \emph{ls f??g} \\
frog \\
/home/larry\$ \emph{ls ????f} \\
stuff \\
/home/larry\$ 
\end{tscreen}

Kot lahko vidite, vam džokerji dovoljujejo določitev veliko datotek
hkrati.  V pregledu ukazov, ki se začenja na
strani~\pageref{sec-command-summ}, smo dejali, da lahko ukaza
\texttt{cp} in \texttt{mv} pravzaprav prepisujeta ali premikata več
kot eno datoteko naenkrat.  Na primer,
\begin{tscreen}
/home/larry\$ \emph{cp /etc/s* /home/larry}
\end{tscreen}
prepiše vse datoteke iz \texttt{/etc}, ki se začenjajo s
>>\texttt{s}<<, v imenik \texttt{/home/larry}.  Oblika uporabe ukaza
\texttt{cp} je v resnici
\begin{tscreen}
cp \cparam{datoteke}  \cparam{cilj}
\end{tscreen}
kjer \textsl{datoteke} naštevajo ime datotek za prepis in je
\textsl{cilj} ciljna datoteka ali imenik.  \texttt{mv} ima identično
skladnjo.

Če prepisujete ali premikate več kot eno datoteko, mora biti
\textsl{cilj} imenik.  Le eno samo datoteko lahko prepišete
ali premaknete v drugo datoteko.

\index{ukazne lupine!znaki džokerji za|)}
\index{dz~oker@džoker!v imenih datotek|)}
\index{imena datotek!džokerji v|)}
