262 lines
7.1 KiB
XML
262 lines
7.1 KiB
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||
<!DOCTYPE html
|
||
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||
"tuteurs://DTD/tml.dtd">
|
||
<html>
|
||
<head>
|
||
<title>cp et mv</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>Corrigé des exercices sur <code>cp</code> et <code>mv</code></h1>
|
||
|
||
|
||
<p>
|
||
Ces exercices sont des questions de cours : les solutions se trouvent
|
||
toutes dans les pages de man des commandes en question. On suppose donc
|
||
connues les commandes de <code>less</code>, qui servent à se déplacer dans les
|
||
pages de man... et la commande servant à chercher un mot. Testez les
|
||
commandes sur des fichiers et répertoires d'essai pour vous faire la main et
|
||
comprendre ce qui se passe.
|
||
</p>
|
||
|
||
<h2><a name="cp"><code>cp</code></a></h2>
|
||
|
||
|
||
|
||
<ol>
|
||
|
||
|
||
<li><a name="cp1"> <strong>Est-il possible de faire une copie d'un répertoire
|
||
et de l'ensemble de ses sous-répertoires en une seule ligne de
|
||
commande ?</strong> </a>
|
||
|
||
<p>
|
||
Oui, c'est à cela que sert l'option <code>-r</code> (<em>recursive</em>).
|
||
Supposons, suivant l'<a href="mkdir_cd.html#arbo">arborescence d'exemple</a>,
|
||
que vous voulez copier le répertoire <code>Rapport</code> et ses
|
||
sous-répertoires dans le répertoire <code>www</code>. Il faut
|
||
taper :</p>
|
||
|
||
<pre>
|
||
cp -r Rapport/ www/
|
||
</pre>
|
||
<p class="continue">
|
||
ou
|
||
</p>
|
||
|
||
<pre>
|
||
cp -R Rapport/ www/
|
||
</pre></li>
|
||
|
||
<li><a name="cp2"> <strong>Que se passe-t-il si l'on veut faire une copie
|
||
appelée <code>tentative/</code> de son répertoire <code>essai/</code>, et que
|
||
le répertoire <code>tentative/</code> existe déjà ?</strong> </a>
|
||
|
||
<p>Quand on indique le nom d'un répertoire qui n'existe pas, <code>cp</code>
|
||
considère qu'il s'agit du nom à donner à la copie du premier répertoire (ou
|
||
fichier). Quand le répertoire existe déjà, <code>cp</code> considère qu'il
|
||
s'agit de l'endroit où il faut placer la copie du premier élément (la
|
||
«cible» : <em>target</em>).</p>
|
||
|
||
<p>
|
||
Si donc on tape
|
||
</p>
|
||
<pre>
|
||
cp -R essai/ tentative/
|
||
</pre>
|
||
<p class="continue">
|
||
et que <code>tentative/</code> existe déjà, on obtient une copie de
|
||
<code>essai/</code>, également appelée <code>essai/</code>, placée dans le
|
||
répertoire <code>tentative/</code>.
|
||
</p>
|
||
</li>
|
||
|
||
<li><a name="cp3"> <strong>Que se passe-t-il si vous voulez faire une copie
|
||
d'un fichier dans un répertoire où il existe déjà un fichier de ce
|
||
nom ?</strong> </a>
|
||
|
||
<p>
|
||
Le programme demande si vous voulez vraiment effacer le fichier déjà existant
|
||
pour le remplacer par celui dont vous faites la copie.
|
||
</p>
|
||
|
||
<div class="attention">
|
||
<h1>&icone.attention; Attention &icone.attention;</h1>
|
||
<p> Il en est
|
||
ainsi parce que vous avez un alias de <code>cp</code> sur <code>cp -i</code>,
|
||
qui demande confirmation. Ce n'est pas nécessairement le cas partout.
|
||
</p>
|
||
|
||
<p>&icone.note;Pour savoir quels sont vos
|
||
alias, tapez «<code>alias</code>» ou allez voir dans votre fichier
|
||
<code>.alias</code>. Avec la config conscrits, les alias sont dans le
|
||
<code>.zshrc</code> (le fichier de configuration du shell
|
||
<code>zsh</code>).</p>
|
||
</div></li>
|
||
|
||
<li><a name="cp4"> <strong>Quel est l'effet d'une ligne comme :
|
||
</strong></a>
|
||
<pre>
|
||
cp fichier1 fichier2 fichier3 repertoire/
|
||
</pre>
|
||
|
||
<p>
|
||
Les fichiers <code>fichier1</code>, <code>fichier2</code> et
|
||
<code>fichier3</code> sont copiés sous leur nom dans le répertoire
|
||
<code>répertoire/</code>, qui doit exister.
|
||
</p>
|
||
</li>
|
||
|
||
</ol>
|
||
|
||
<h2><a name="mv"><code>mv</code></a></h2>
|
||
|
||
<ol>
|
||
|
||
<li><a name="mv1"> <strong>Que se passe-t-il si le fichier «cible» existe
|
||
déjà ?</strong> </a>
|
||
<p>
|
||
Si vous avez un alias de <code>mv</code> sur <code>mv -i</code> (cas de la
|
||
config conscrits), le programme demande si vous voulez réécrire le fichier
|
||
cible en remplaçant son contenu par celui du fichier de départ :
|
||
</p>
|
||
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls
|
||
rapport.tex notes complements
|
||
<span class="prompt">bireme ~ $</span>mv notes complements
|
||
mv: overwrite complements (yes/no)? y
|
||
<span class="prompt">bireme ~ $</span>ls
|
||
rapport.tex complements
|
||
</pre>
|
||
</li>
|
||
|
||
<li><a name="mv2"> Supposez que vous avez chez vous l'arborescence</a> <a
|
||
href="../mkdir_cd.html#arbo">que voici</a>, et que vous vous trouvez dans
|
||
<code>~/Rapport/docs/</code>.
|
||
|
||
<ul>
|
||
|
||
<li> <strong>Comment faites-vous pour y amener <code>Rapport.tex</code> qui
|
||
se trouve dans le répertoire père ?</strong>
|
||
<pre>
|
||
mv ../Rapport.tex .
|
||
</pre>
|
||
|
||
<p>Amener le fichier <code>Rapport.tex</code> situé dans répertoire père
|
||
(<code>../Rapport.tex</code>) dans le répertoire où on se trouve
|
||
(<code>.</code> : ici).
|
||
</p></li>
|
||
|
||
<li> <strong>Comment faites-vous ensuite pour ramener ce fichier à son
|
||
emplacement d'origine ?</strong>
|
||
|
||
<pre>
|
||
mv Rapport.tex ..
|
||
</pre>
|
||
|
||
|
||
<p>Amener le fichier <code>Rapport.tex</code> situé dans le répertoire courant,
|
||
dans le répertoire père (<code>..</code>).</p></li>
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
<li><a name="mv3"> <strong>Comment renommer un répertoire
|
||
<code>bla/</code> en <code>blo/</code> ? Que se passe-t-il si le
|
||
répertoire <code>blo</code> existe déjà ?</strong> </a>
|
||
|
||
|
||
<p>Il suffit de taper
|
||
</p>
|
||
|
||
<pre>
|
||
mv bla/ blo/
|
||
</pre>
|
||
|
||
<p>
|
||
Si jamais <code>blo/</code> existe déjà, <code>bla/</code> devient un
|
||
sous-répertoire de <code>blo/</code>.
|
||
</p>
|
||
</li>
|
||
|
||
<li><a name="mv4"> <strong>Comment faire pour à la fois déplacer un fichier
|
||
et changer son nom ? Que se passe-t-il si il existe déjà un fichier de
|
||
ce nom dans le répertoire d'arrivée ? </strong></a>
|
||
|
||
<p>
|
||
Supposons que l'on veut amener <code>Rapport.tex</code> dans le répertoire
|
||
courant, et l'appeler <code>stage</code>. On tape :
|
||
</p>
|
||
|
||
<pre>
|
||
mv ../Rapport.tex stage
|
||
</pre>
|
||
|
||
<p>
|
||
<code>Rapport.tex</code> est à la fois déplacé et renommé; vous pouvez
|
||
vérifier qu'il n'est plus dans <code>Rapport</code> et qu'il y a désormais un
|
||
fichier <code>stage</code> dans <code>docs/</code>.
|
||
</p>
|
||
|
||
<p>
|
||
Si le fichier d'arrivée existe déjà, on se retrouve dans le cas vu tout au
|
||
début de cet exercice (remplacement ou non).
|
||
</p>
|
||
</li>
|
||
|
||
|
||
<li><a name="mv5"> <strong>Mêmes questions avec un répertoire</strong> </a>.
|
||
|
||
|
||
<p>Pour déplacer et renommer, la syntaxe est la même que pour un fichier :
|
||
</p>
|
||
|
||
<pre>
|
||
mv ../bla ble/
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
déplace le répertoire <code>bla/</code> du répertoire père dans le répertoire
|
||
courant, et le renomme en <code>ble/</code>. Si jamais <code>ble/</code>
|
||
existe déjà, <code>bla/</code> y est déplacé sous son nom, et devient un
|
||
sous-répertoire de <code>ble/</code>.
|
||
</p>
|
||
</li>
|
||
|
||
|
||
<li><a name="mv6"> <strong> Que se passe-t-il si on lance <code>mv</code>
|
||
avec les options <code>-i</code> et <code>-f</code> ensemble ? </strong>
|
||
</a>.
|
||
|
||
<p>
|
||
L'option <code>-f</code> (<em>force</em>) sert à renommer le fichier
|
||
impérativement, même si le fichier cible existe déjà, sans demander
|
||
confirmation. L'option <code>-i</code> (<em>interactive</em>) demande
|
||
confirmation. Des deux options, c'est <code>-f</code> qui l'emporte :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls
|
||
bla tutu Rapport/
|
||
<span class="prompt">bireme ~ $</span> alias mv
|
||
mv='mv -i'
|
||
<span class="prompt">bireme ~ $</span> mv bla tutu
|
||
mv: overwrite tutu (yes/no)? n
|
||
<span class="prompt">bireme ~ $</span> mv -f bla tutu
|
||
<span class="prompt">bireme ~ $</span> ls
|
||
tutu Rapport/
|
||
</pre>
|
||
</li>
|
||
|
||
</ol>
|
||
|
||
<div class="metainformation">
|
||
Auteur : Émilia Robin, Joël Riou. Dernière modification le 2002-12-08.
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|
||
|