Copier, déplacer et renommer : cp
et mv
Objectif de cet atelier pratique
- Prise en main des opérations de copie, de déplacement et de renommage de fichiers
Copier des fichiers et des répertoires avec cp
La commande cp
(copy) sert à copier des fichiers. Dans son utilisation la
plus basique, elle duplique un fichier d'un endroit à un autre. Prenons par
exemple un fichier de notre répertoire ~/Documents
et copions-le dans le
répertoire /tmp
:
$ cd ~/Documents
$ ls -l livres.txt
-rw-r--r--. 1 microlinux microlinux 55 20 sept. 10:05 livres.txt
$ cp livres.txt /tmp/
$ ls -l /tmp/livres.txt
-rw-r--r--. 1 microlinux microlinux 55 21 sept. 06:36 /tmp/livres.txt
Pour copier des répertoires entiers avec leur contenu, il faudra invoquer cp
avec l'option -R
(comme recursive, « récursif »). Dans l'exemple,
j'utilise en plus l'option -v
qui explicite bien chaque détail de
l'opération :
$ cd
$ tree Fichiers/
Fichiers/
├── Documents
│ └── texte.txt
├── Films
│ └── film.avi
└── Images
└── photo.jpg
3 directories, 3 files
$ cp -Rv Fichiers/ /tmp/
'Fichiers/' -> '/tmp/Fichiers'
'Fichiers/Images' -> '/tmp/Fichiers/Images'
'Fichiers/Images/photo.jpg' -> '/tmp/Fichiers/Images/photo.jpg'
'Fichiers/Films' -> '/tmp/Fichiers/Films'
'Fichiers/Films/film.avi' -> '/tmp/Fichiers/Films/film.avi'
'Fichiers/Documents' -> '/tmp/Fichiers/Documents'
'Fichiers/Documents/texte.txt' -> '/tmp/Fichiers/Documents/texte.txt'
$ tree /tmp/Fichiers/
/tmp/Fichiers/
├── Documents
│ └── texte.txt
├── Films
│ └── film.avi
└── Images
└── photo.jpg
3 directories, 3 files
Voici maintenant une utilisation de cp
qui peut ressembler (de loin) au
quotidien réel d'un administrateur système.
-
Créez un fichier de configuration
config
dans votre répertoire personnel. -
Effectuez-en ensuite une copie de sauvegarde
config.orig
, qui représentera en quelque sorte l'état initial de votre fichier de configuration. -
Maintenant, modifiez
config
, en ajoutant une ligne par exemple.
Vos fichiers ne sont désormais plus les mêmes.
$ cd
$ cat > config << EOF
> Option 1
> Option 2
> Option 3
> EOF
$ cp -v config config.orig
'config' -> 'config.orig'
$ ls -l config*
-rw-r--r--. 1 microlinux microlinux 27 21 sept. 06:42 config
-rw-r--r--. 1 microlinux microlinux 27 21 sept. 06:43 config.orig
$ echo Option 4 >> config
$ ls -l config*
-rw-r--r--. 1 microlinux microlinux 36 21 sept. 06:43 config
-rw-r--r--. 1 microlinux microlinux 27 21 sept. 06:43 config.orig
Utiliser le joker
Dans ce dernier exemple, j'ai introduit une petite nouveauté qui semblera
familière aux vétérans de MS-DOS, même si son fonctionnement diffère
quelque peu : le joker1 *
. L'astérisque *
signifie
« n'importe quelle chaîne de caractères ». Si cela ne vous paraît
pas très parlant, pensez aux jeux de cartes, où le joker signifie
« n'importe quelle carte », ou encore aux petites lettrines
immaculées du Scrabble, celles qui endossent le rôle de n'importe quelle
lettre salvatrice au milieu de notre « WGTHRX ». Là encore,
prenons un exemple.
Depuis que nous avons entrepris notre initiation à la ligne de commande,
les fichiers et les répertoires s'entassent dans notre répertoire
personnel. Le prochain atelier pratique sera d'ailleurs consacré aux
commandes de suppression, ce qui nous permettra d'envisager un brin de
ménage. Pour l'instant, vous devez faire avec tout ce fatras. Admettons que
vous ne vouliez afficher des renseignements précis que sur vos seuls
fichiers dont le nom commence par bonjour
. Vous pourriez très bien
expliciter à la suite les quatre fichiers en argument :
$ cd ~/Documents/
$ ls -l bonjour.txt bonjour2.txt bonjour3.txt bonjourtous.txt
-rw-r--r--. 1 microlinux microlinux 17 21 sept. 06:57 bonjour2.txt
-rw-r--r--. 1 microlinux microlinux 22 21 sept. 06:57 bonjour3.txt
-rw-r--r--. 1 microlinux microlinux 58 21 sept. 06:57 bonjourtous.txt
-rw-r--r--. 1 microlinux microlinux 19 21 sept. 06:56 bonjour.txt
Toutefois, il y a moyen de faire plus court :
$ ls -l bonjour*
-rw-r--r--. 1 microlinux microlinux 17 21 sept. 06:57 bonjour2.txt
-rw-r--r--. 1 microlinux microlinux 22 21 sept. 06:57 bonjour3.txt
-rw-r--r--. 1 microlinux microlinux 58 21 sept. 06:57 bonjourtous.txt
-rw-r--r--. 1 microlinux microlinux 19 21 sept. 06:56 bonjour.txt
Les habitués de MS-DOS verront tout de suite la différence. Sous Windows,
le joker aurait dû être invoqué sous la forme BONJOUR*.*
, voire
BONJOUR*.TXT
.
Sauvegarder un répertoire
Pour en revenir à cp
, je peux également copier l'intégralité d'un répertoire
vers un répertoire d'un autre nom :
$ cd
$ cp -Rv Fichiers CopieFichiers
'Fichiers' -> 'CopieFichiers'
'Fichiers/Images' -> 'CopieFichiers/Images'
'Fichiers/Images/photo.jpg' -> 'CopieFichiers/Images/photo.jpg'
'Fichiers/Films' -> 'CopieFichiers/Films'
'Fichiers/Films/film.avi' -> 'CopieFichiers/Films/film.avi'
'Fichiers/Documents' -> 'CopieFichiers/Documents'
'Fichiers/Documents/texte.txt' -> 'CopieFichiers/Documents/texte.txt'
Admettons maintenant que je souhaite effectuer une copie complète du répertoire
Fichiers
et de tout son contenu vers un autre endroit du système, tout en
donnant un autre nom au répertoire copié, par exemple Sauvegarde20250921
.
Dans ce cas, voici ce qu'il faut faire :
$ cp -Rv Fichiers /tmp/Sauvegarde20250921
'Fichiers' -> '/tmp/Sauvegarde20250921'
'Fichiers/Images' -> '/tmp/Sauvegarde20250921/Images'
'Fichiers/Images/photo.jpg' -> '/tmp/Sauvegarde20250921/Images/photo.jpg'
'Fichiers/Films' -> '/tmp/Sauvegarde20250921/Films'
'Fichiers/Films/film.avi' -> '/tmp/Sauvegarde20250921/Films/film.avi'
'Fichiers/Documents' -> '/tmp/Sauvegarde20250921/Documents'
'Fichiers/Documents/texte.txt' -> '/tmp/Sauvegarde20250921/Documents/texte.txt'
Le seul aspect peu réaliste de ce dernier exemple, c'est que /tmp
n'est pas
un endroit approprié pour ranger des sauvegardes. De meilleurs endroits seront
à découvrir un peu plus loin.
La barre oblique /
à la fin des répertoires
Certains parmi vous auront probablement remarqué une petite incohérence
dans l'utilisation de /
à la fin des noms de répertoires. Concrètement,
lorsque je copie un répertoire Fichiers
, je peux écrire cp Fichiers/
CopieFichiers
ou bien cp Fichiers CopieFichiers
. La barre oblique
s'ajoute d'emblée à la fin d'un nom de répertoire lorsque j'utilise la
complétion automatique, comme nous le verrons un peu plus loin.
Déplacer des fichiers et des répertoires avec mv
La commande mv
(move comme « bouger ») sert à déplacer des
fichiers :
Le fichier ~/Documents/bonjour.txt
a été déplacé vers le répertoire /tmp
.
mv
ne s'applique pas seulement sur des fichiers, mais également sur des
répertoires entiers. Pour essayer, créez une autre copie du répertoire
Fichiers
et déplacez-la vers /tmp
:
Question épineuse : comment déplacer à nouveau le fichier
/tmp/bonjour.txt
vers mon répertoire ~/Documents
lorsque je me trouve dans
ce dernier ? Voici la réponse :
Et je pourrais faire de même avec /tmp/AutreCopieFichiers
:
Rappelez-vous que le point .
signifie « ici ». La première des deux
commandes précédentes peut se lire littéralement comme ceci :
« déplace (mv
) le fichier bonjour.txt
qui se situe dans le répertoire
/tmp
(/tmp/bonjour.txt
) vers ici (.
) ».
Renommer des fichiers et des répertoires avec mv
La commande mv
ne sert pas seulement à déplacer, mais aussi à renommer des
fichiers et des répertoires.
Une seule commande pour déplacer et renommer des fichiers
Cette double utilisation de mv
tourmente habituellement les novices de la
ligne de commande sous Linux. Rassurez-vous : ce n'est qu'une simple
habitude à prendre. Un expert venant d'un autre système d'exploitation
mettra un peu moins de trois mois à s'y habituer. Et un enfant de dix ans
aura assimilé ce double fonctionnement en moins de trois minutes. :o)
Là, nous venons tout simplement de renommer le fichier bonjour.txt
en
hello.txt
.
Pour ajouter à la confusion, demandons-nous s'il existe un moyen de déplacer ce
fichier hello.txt
vers /tmp
, tout en le renommant par la même opération en
bonjour.txt
? Oui, et c'est même très simple :
-
J'évite d'utiliser les traductions françaises comme « caractère générique » ou « métacaractère », tout juste aptes à séduire les penseurs postmodernes. ↩