Verified Commit c14cc883 authored by Stephane Bonnet's avatar Stephane Bonnet
Browse files

globbing et wildcards

parent 9fb70094
Pipeline #33748 passed with stage
in 18 seconds
......@@ -73,13 +73,13 @@ pdfproducer={Latex},
\end{frame}
\section[Introduction]{Introduction}
\input{src/cli/intro.tex}
%\input{src/cli/intro.tex}
\section[Rappels]{Rappels}
\input{src/cli/rappels.tex}
%\input{src/cli/rappels.tex}
\section[Les bases]{Bases}
\input{src/cli/basics.tex}
%\input{src/cli/basics.tex}
\section[On avance un peu]{Un peu plus avancé}
\input{src/cli/semi-adv.tex}
......
\subsection{Wildcards et globs}
\subsection{Globbing patterns et wildcards}
\begin{frame}[fragile]{Faire référence à plusieurs fichiers}
%% globs
%% Attention aux fichiers cachés
C'est fastidieux d'être obligé d'écrire le nom de tous les fichiers dans
les commandes. On peut se simplifier la vie grâce aux globbing patterns.
\begin{block}{globbing pattern (\emph{motif d'englobement})}
Un motif de nom de fichier qui en englobe plusieurs.
\end{block}
\begin{block}{wildcard (\emph{joker})}
Lettre spéciale qui représente un caractère ou une suite de caractères quelconques dans un \emph{globbing pattern}.
\end{block}
\end{frame}
\begin{frame}[fragile]{Le joker ``*''}
Joker le plus utilisé.
Remplace toute suite de caractères dans un motif. S'il est utilisé seul, remplace tout mot.
\begin{exampleblock}{Créeons des fichiers}
\cmd{cd ; mkdir api ; cd api}
\end{exampleblock}
\begin{alertblock}{Le point-virgule}
Le point virgule sépare des commandes successives sur la ligne de commande.
\end{alertblock}
\begin{alertblock}{\cmd{touch}}
Crée les fichiers passés en arguments. Si un fichier existe déjà,
met à jour sa date de dernière modification.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Le joker ``*''}
\begin{exampleblock}{Supprimons des fichiers}
On pourrait écrire: \cmd{rm here that there this}
\cmd{rm *} fait la même chose car le joker ``*'' correspond à tous les noms de fichiers.
\end{exampleblock}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls
here that there this
$ \textcolor{yellow}{rm *}
$ ls
$
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Le joker ``*''}
\begin{exampleblock}{Re-créeons des fichiers}
\cmd{touch here that there this}
\end{exampleblock}
On peut restreindre le motif en donnant une partie du nom.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls *
here that there this
$ ls t*
that there this
$ ls *h*
here that there this
$ ls th*e
there
$ ls that*
that
$ ls thi*s
this
\end{Verbatim}
\end{beamercolorbox}
\begin{alertblock}{Attention}
``*'' correspond aussi aux séquences vides!
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Le joker ``?''}
\begin{block}{}
Il représente un caractère unique quelconque dans un motif.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls th?t
that
$ ls th??
that this
$ ls th???
there
$ ls ?here
there
$ ls *here \textcolor{red}{<---- Attention ici le joker correspond aussi à une séquence vide}
here there
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Le joker ``[]''}
\begin{block}{}
Permet de définir un ensemble de caractères pouvant apparaître dans le nom.
\end{block}
\begin{exampleblock}{Créons plus de fichiers}
\cmd{touch file\_1 file\_2 file\_3 file\_4 file\_a file\_b file\_c file\_d}
\end{exampleblock}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls file_[12ab]
file_1 file_2 file_a file_b
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Le joker ``[]''}
On peut spécifier des intervalles plutôt que de donner tous les caractères.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls file_[1-3b-d]
file_1 file_2 file_3 file_b file_c file_d
\end{Verbatim}
\end{beamercolorbox}
\vspace{10pt}
On peut aussi prendre le complément de la liste en la préfixant par un ``\verb+^+''.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls file_[^1-3b-d]
file_4 file_a
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Échappement de caractères}
Et si il y a un fichier dont le nom contient le caractère ``-''?
\begin{exampleblock}{Un fichier de plus}
\cmd{touch file\_-}
\end{exampleblock}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls file_[1-3b-d]
file_1 file_2 file_3 file_b file_c file_d
$ ls file_[1-3b-d\textcolor{yellow}{\textbackslash{}-}]
file_- file_1 file_2 file_3 file_b file_c file_d
\end{Verbatim}
\end{beamercolorbox}
\vspace{10pt}
\begin{block}{Caractère d'échappement}
Le caractère ``\textbackslash'' supprime l'interprétation par le shell du caractère qui le suit.
On peut même échapper l'espace.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ touch my\textbackslash file
$ ls
'my file' \textcolor{cyan}{<----- Les simple quotes indiquent qu'il s'agit d'un seul fichier}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Expansion d'accolades}
\begin{block}{Expansion d'accolades}
\cmd{bash} supporte l'expansion d'accolades: générer toutes les chaînes dans un intervalle ou à partir
d'une liste.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ echo \{1..20\}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$ echo a\{c,d,e\}f
acf adf aef
\end{Verbatim}
\end{beamercolorbox}
\vspace{10pt}
Cette expansion peut être utilisée dans des motifs.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ touch file_\{1..20\}
$ ls
file_1 file_12 file_15 file_18 file_20 file_5 file_8
file_10 file_13 file_16 file_19 file_3 file_6 file_9
file_11 file_14 file_17 file_2 file_4 file_7
$ rm file_\{12..14\}
$ ls
file_1 file_15 file_18 file_20 file_5 file_8
file_10 file_16 file_19 file_3 file_6 file_9
file_11 file_17 file_2 file_4 file_7
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Expansion d'accolades}
\begin{block}{Extensions multiples}
L'expansion d'accolade est très utilisée pour sélectionner des fichiers avec des extensions multiples.
\cmd ls *.\{jpg,png,bmp\}
listera tous les fichiers correspondants à ces extensions.
\end{block}
\begin{alertblock}{Extensions}
\begin{itemize}
\item Les extensions n'ont pas de sens particulier sous UNIX.
\item Spécificité de Windows et de ses prédécesseurs.
\item Pratique pour indiquer le type des fichiers...
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Remarques}
\begin{block}{Jokers dans les chemins}
Le chemin fait partie du nom des fichiers, on peut mettre des jokers dans ceux-ci.
\cmd{ls /var/*/*.log}
liste tous les fichiers de logs dans tous les sous-répertoires directs de \cmd{/var}
\cmd{ls /var/*/*/*.log}
liste tous les fichiers de logs dans tous les sous-répertoires des sous-répertoires de \cmd{/var}
\end{block}
\begin{block}{Si le motif ne correspond à aucun fichier?}
Dans ce cas, le motif est transmis tel quel à la commande.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ rm file?
rm: impossible de supprimer 'file?': Aucun fichier ou dossier de ce type
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Remarques}
\begin{alertblock}{Attention aux noms pris comme des options}
On suppose qu'il existe un fichier ``-R''.
Si on exécute ``\cmd{rm *}'', l'englobement va passer le nom \cmd{-R} à ``\cmd{rm}'' qui l'interprétera comme une option.
La commande réellement exécutée sera ``\cmd{rm -R *}''. Oups!
\end{alertblock}
\begin{block}{Séparer les options des arguments}
\begin{itemize}
\item ``\cmd{-{}-}'' est utilisé dans les commandes pour séparer explicitement les options des arguments.
\item Tout ce qui suit ``\cmd{-{}-}'' est interprété comme un argument.
\end{itemize}
``\cmd{rm -{}- *}'' est donc plus sûr, puisque c'est bien la commande ``\cmd{rm -{}- -R *}'' qui sera exécutée.
\end{block}
\end{frame}
\begin{frame}[fragile]{Et les fichiers cachés?}
%% globs
%% Attention aux fichiers cachés
\begin{block}{Des fichiers cachés? Où ça?}
Tous les fichiers dont le nom commence par un point sont cachés.
\begin{itemize}
\item Ils ne sont pas affichés par ``\cmd{ls}''.
\item Ils ne sont pas considérés pour l'englobement.
\end{itemize}
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ touch .hidden
$ ls
$ ls -a
\textcolor{blue}{.} \textcolor{blue}{..} .hidden
$ rm *
$ ls -a
\textcolor{blue}{.} \textcolor{blue}{..} .hidden
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Et les fichiers cachés?}
\begin{alertblock}{\cmd{shopt}}
\cmd{shopt} permet de changer certaines options du shell.
\begin{itemize}
\item \cmd{shopt -s <option>} active l'option \cmd{<option>}
\item \cmd{shopt -u <option>} active l'option \cmd{<option>}
\end{itemize}
\end{alertblock}
\begin{block}{L'option \cmd{dotglob}}
Si elle est active, les fichiers commençant par un point sont candidats à l'englobement. Par défaut désactivée.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ ls -a
\textcolor{blue}{.} \textcolor{blue}{..} .hidden
$ \textcolor{yellow}{shopt -s dotglob}
$ rm *
$ ls -a
\textcolor{blue}{.} \textcolor{blue}{..}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\subsection{Chercher des fichiers}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment