Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Picasoft
APIs
Init
Linux
Commits
c14cc883
Verified
Commit
c14cc883
authored
Jan 20, 2019
by
Stephane Bonnet
Browse files
globbing et wildcards
parent
9fb70094
Pipeline
#33748
passed with stage
in 18 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
main.tex
View file @
c14cc883
...
...
@@ -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
}
...
...
src/cli/semi-adv.tex
View file @
c14cc883
\subsection
{
Wildcards et glob
s
}
\subsection
{
Globbing patterns et wildcard
s
}
\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
-
3
b
-
d
]
file
_
1
file
_
2
file
_
3
file
_
b file
_
c file
_
d
\end
{
Verbatim
}
\end
{
beamercolorbox
}
\vspace
{
10
pt
}
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
-
3
b
-
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
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment