tuteurs.ens.fr/unix/exercices/solutions/cp_mv-sol.tml

263 lines
7.1 KiB
Text
Raw Normal View History

<?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<69> des exercices sur <code>cp</code> et <code>mv</code></h1>
<p>
Ces exercices sont des questions de cours<72>: 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 <20> se d<>placer dans les
pages de man... et la commande servant <20> 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<EFBFBD>?</strong> </a>
<p>
Oui, c'est <20> 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<EFBFBD>:</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<EFBFBD>e <code>tentative/</code> de son r<>pertoire <code>essai/</code>, et que
le r<>pertoire <code>tentative/</code> existe d<>j<EFBFBD><6A>?</strong> </a>
<p>Quand on indique le nom d'un r<>pertoire qui n'existe pas, <code>cp</code>
consid<EFBFBD>re qu'il s'agit du nom <20> donner <20> la copie du premier r<>pertoire (ou
fichier). Quand le r<>pertoire existe d<>j<EFBFBD>, <code>cp</code> consid<69>re qu'il
s'agit de l'endroit o<> il faut placer la copie du premier <20>l<EFBFBD>ment (la
<EFBFBD>cible<EFBFBD><EFBFBD>: <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<EFBFBD>, on obtient une copie de
<code>essai/</code>, <20>galement appel<65>e <code>essai/</code>, plac<61>e dans le
r<EFBFBD>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<EFBFBD> un fichier de ce
nom<EFBFBD>?</strong> </a>
<p>
Le programme demande si vous voulez vraiment effacer le fichier d<>j<EFBFBD> existant
pour le remplacer par celui dont vous faites la copie.
</p>
<div class="attention">
<h1>&icone.attention;<3B>Attention<6F>&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 <20><code>alias</code><3E> 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<6D>:
</strong></a>
<pre>
cp fichier1 fichier2 fichier3 repertoire/
</pre>
<p>
Les fichiers <code>fichier1</code>, <code>fichier2</code> et
<code>fichier3</code> sont copi<70>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 <20>cible<6C> existe
d<EFBFBD>j<EFBFBD><EFBFBD>?</strong> </a>
<p>
Si vous avez un alias de <code>mv</code> sur <code>mv<6D>-i</code> (cas de la
config conscrits), le programme demande si vous voulez r<><72>crire le fichier
cible en rempla<6C>ant son contenu par celui du fichier de d<>part<72>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls
rapport.tex notes complements
<span class="prompt">bireme ~ $</span>mv<6D>notes<65>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<72>?</strong>
<pre>
mv ../Rapport.tex .
</pre>
<p>Amener le fichier <code>Rapport.tex</code> situ<74> dans r<>pertoire p<>re
(<code>../Rapport.tex</code>) dans le r<>pertoire o<> on se trouve
(<code>.</code><3E>: ici).
</p></li>
<li> <strong>Comment faites-vous ensuite pour ramener ce fichier <20> son
emplacement d'origine<6E>?</strong>
<pre>
mv Rapport.tex ..
</pre>
<p>Amener le fichier <code>Rapport.tex</code> situ<74> 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><3E>? Que se passe-t-il si le
r<EFBFBD>pertoire <code>blo</code> existe d<>j<EFBFBD><6A>?</strong> </a>
<p>Il suffit de taper
</p>
<pre>
mv bla/ blo/
</pre>
<p>
Si jamais <code>blo/</code> existe d<>j<EFBFBD>, <code>bla/</code> devient un
sous-r<>pertoire de <code>blo/</code>.
</p>
</li>
<li><a name="mv4"> <strong>Comment faire pour <20> la fois d<>placer un fichier
et changer son nom<6F>? Que se passe-t-il si il existe d<>j<EFBFBD> un fichier de
ce nom dans le r<>pertoire d'arriv<69>e<EFBFBD>? </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<70>:
</p>
<pre>
mv ../Rapport.tex stage
</pre>
<p>
<code>Rapport.tex</code> est <20> la fois d<>plac<61> et renomm<6D>; vous pouvez
v<EFBFBD>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<69>e existe d<>j<EFBFBD>, on se retrouve dans le cas vu tout au
d<EFBFBD>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<65>:
</p>
<pre>
mv ../bla ble/
</pre>
<p class="continue">
d<EFBFBD>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<EFBFBD>, <code>bla/</code> y est d<>plac<61> 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<6C>? </strong>
</a>.
<p>
L'option <code>-f</code> (<em>force</em>) sert <20> renommer le fichier
imp<EFBFBD>rativement, m<>me si le fichier cible existe d<>j<EFBFBD>, sans demander
confirmation. L'option <code>-i</code> (<em>interactive</em>) demande
confirmation. Des deux options, c'est <code>-f</code> qui l'emporte<74>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls
bla tutu Rapport/
<span class="prompt">bireme ~ $</span><3E>alias<61>mv
mv='mv -i'
<span class="prompt">bireme ~ $</span><3E>mv<6D>bla<6C>tutu
mv: overwrite tutu (yes/no)? n
<span class="prompt">bireme ~ $</span><3E>mv<6D>-f<>bla<6C>tutu
<span class="prompt">bireme ~ $</span><3E>ls
tutu Rapport/
</pre>
</li>
</ol>
<div class="metainformation">
Auteur<75>: <20>milia Robin, Jo<4A>l Riou. Derni<6E>re modification le 2002-12-08.
</div>
</body>
</html>