cp
et mv
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 less
, 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.
cp
Oui, c'est à cela que sert l'option -r
(recursive).
Supposons, suivant l'arborescence d'exemple,
que vous voulez copier le répertoire Rapport
et ses
sous-répertoires dans le répertoire www
. Il faut
taper :
cp -r Rapport/ www/
ou
cp -R Rapport/ www/
tentative/
de son répertoire essai/
, et que
le répertoire tentative/
existe déjà ?
Quand on indique le nom d'un répertoire qui n'existe pas, cp
considère qu'il s'agit du nom à donner à la copie du premier répertoire (ou
fichier). Quand le répertoire existe déjà, cp
considère qu'il
s'agit de l'endroit où il faut placer la copie du premier élément (la
«cible» : target).
Si donc on tape
cp -R essai/ tentative/
et que tentative/
existe déjà, on obtient une copie de
essai/
, également appelée essai/
, placée dans le
répertoire tentative/
.
Le programme demande si vous voulez vraiment effacer le fichier déjà existant pour le remplacer par celui dont vous faites la copie.
Il en est
ainsi parce que vous avez un alias de cp
sur cp -i
,
qui demande confirmation. Ce n'est pas nécessairement le cas partout.
Pour savoir quels sont vos
alias, tapez «alias
» ou allez voir dans votre fichier
.alias
. Avec la config conscrits, les alias sont dans le
.zshrc
(le fichier de configuration du shell
zsh
).
cp fichier1 fichier2 fichier3 repertoire/
Les fichiers fichier1
, fichier2
et
fichier3
sont copiés sous leur nom dans le répertoire
répertoire/
, qui doit exister.
mv
Si vous avez un alias de mv
sur mv -i
(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 :
bireme ~ $ ls rapport.tex notes complements bireme ~ $mv notes complements mv: overwrite complements (yes/no)? y bireme ~ $ls rapport.tex complements
~/Rapport/docs/
.
Rapport.tex
qui
se trouve dans le répertoire père ?mv ../Rapport.tex .
Amener le fichier Rapport.tex
situé dans répertoire père
(../Rapport.tex
) dans le répertoire où on se trouve
(.
: ici).
mv Rapport.tex ..
Amener le fichier Rapport.tex
situé dans le répertoire courant,
dans le répertoire père (..
).
bla/
en blo/
? Que se passe-t-il si le
répertoire blo
existe déjà ?
Il suffit de taper
mv bla/ blo/
Si jamais blo/
existe déjà, bla/
devient un
sous-répertoire de blo/
.
Supposons que l'on veut amener Rapport.tex
dans le répertoire
courant, et l'appeler stage
. On tape :
mv ../Rapport.tex stage
Rapport.tex
est à la fois déplacé et renommé; vous pouvez
vérifier qu'il n'est plus dans Rapport
et qu'il y a désormais un
fichier stage
dans docs/
.
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).
Pour déplacer et renommer, la syntaxe est la même que pour un fichier :
mv ../bla ble/
déplace le répertoire bla/
du répertoire père dans le répertoire
courant, et le renomme en ble/
. Si jamais ble/
existe déjà, bla/
y est déplacé sous son nom, et devient un
sous-répertoire de ble/
.
mv
avec les options -i
et -f
ensemble ? .
L'option -f
(force) sert à renommer le fichier
impérativement, même si le fichier cible existe déjà, sans demander
confirmation. L'option -i
(interactive) demande
confirmation. Des deux options, c'est -f
qui l'emporte :
bireme ~ $ ls bla tutu Rapport/ bireme ~ $ alias mv mv='mv -i' bireme ~ $ mv bla tutu mv: overwrite tutu (yes/no)? n bireme ~ $ mv -f bla tutu bireme ~ $ ls tutu Rapport/