La commande cp

cp (copy files) est une commande beaucoup utilisée car cette dernière permet de procéder à des copies de fichiers ou répertoires.

Bien que ce tutoriel soit fait pour les débutants, il est également utile à tous ceux qui souhaitent revoir rapidement des exemples pratiques d’utilisation des diverses options de la commande cp.

Même si vous utilisez la commande cp tous le temps, probablement qu’un ou plusieurs exemples ci-dessous pourront être nouveau pour vous.

La syntaxe générale de commande cp est :

Copier un fichier

Il arrive très souvent de vouloir copier un fichier. Voici un exemple, de la commande cp dans lequel nous copions un fichier nommé « photo.jpg » dans le répertoire « /home/jean/Bureau ».

Copier un fichier en lui donnant un nom différent

Si l’on souhaite donner un nom différent au fichier qui sera copié il suffit de le préciser dans le deuxième argument de la commande. Dans l’exemple ci-dessous nous copions le fichier photo.jpg vers le répertoire « /home/jean/Bureau » et lui donnons le nom « image.jpg ».

Il est possible de faire la même chose au sein du répertoire courant dans lequel nous nous trouvons :

Le fichier photo.jpg sera alors recherché au sein du répertoire courant et sera copié en tant qu’image.jpg.

Copier plusieurs fichiers

Comme représenté ci-dessous, vous pouvez copier plusieurs fichiers ou répertoires :

Si les fichiers à copier ont un pattern commun, vous pouvez utiliser les joker, comme dans l’exemple ci-dessous. Dans cet exemple, tous les fichiers ayant l’extension .jpg sont copiés dans /home/jean/Bureau.

Copier un ou plusieurs répertoires

Il est très courant d’avoir besoin de copier un répertoire. L’exemple ci-dessous copie le répertoire /home/jean/vacances dans /home/jean/Bureau. Nous considérons ici que le répertoire /home/jean/Bureau existe déjà. La copie va donné naissance à un nouveau répertoire nommé « vacances » dans /home/jean/Bureau qui sera la copie du répertoire source. L’option -r utilisée ici, signifie récursif, cela à pour fonction de copier tous les sous répertoires existants au sein du répertoire source.

Ci-dessous, nous copions plusieurs répertoires :

Copier un répertoire et lui donner un nom différent

Souvent il arrive que nous ayons besoin de changer le nom du répertoire que nous copions. Par exemple, si vous souhaitez faire une copie de sauvegarde; admettons que vous disposiez d’un répertoire nommé « prod » que vous souhaitiez en faire une copie « prod-2 ». Allez à l’endroit où se trouve le répertoire « prod » et tapez la commande suivante :

Il est également possible, le faire depuis un autre répertoire, a ce moment là il faut préciser le chemin:

Demande de confirmation avant suppression

La commande cp dispose d’une option souvent employée car présente dans les alias. Lorsque cette option est active la commande cp va demander confirmation avant la suppression de chacun des fichiers. Cette option est disponible grâce aux arguments suivants : -i ou --interactive

Création automatique d’une archive si le fichier cible existe déjà

La commande cp dispose d’une option très pratique qu’on peut appeler grâce aux arguments --backup  ou -b. Cette option permet de créer automatiquement une sauvegarde du fichier cible si jamais ce dernier est déjà existant. Par exemple, en tapant la commande suivante :

Le fichier « image.jpg » est automatiquement sauvegardé au lieu d’être écrasé. Le nom du fichier sauvegardé sera « image.jpg~ ».

Préserver les liens symboliques lors de la copie

Lorsque vous exécutez la commande cp, si le fichier source est un lien, alors le fichier réel (cible) est copié et non le lien.

Dans le cas où vous ne voudriez copier que le lien tel quel, spécifiez l’option -d, comme indiqué dans l’exemple ci-après.

L’exemple suivant montre que sans l’option -d, c’est le fichier qui sera copié (et non le lien):

Pour préserver le lien lors de la copie, faites comme dans l’exemple ci-dessous :

Mode verbeux

L’option -v permet d’avoir plus d’informations concernant l’action effectuée. Dans l’exemple ci-dessous nous effectuons une copie, et on peut observer que la commande cp ajoute une ligne d’information supplémentaire :

Copier tout en préservant les attributs des fichiers

Lorsqu’on copie un fichier, par défaut, ce dernier perd ses attributs d’origine. Démonstration. Voici ci-dessous un fichier nommé « passwd.txt » qui possède certains attributs (utilisateur, groupe, taille, et heure de dernière modification).

On peut observer ci-dessus que ce fichier appartient à l’utilisateur rkusnik et qu’il possède une certaine date précise concernant sa dernière modification (21 avril 19:56). L’utilisateur renata va copier maintenant ce fichier :

Regardons ensemble les attributs du nouveau fichier :

Comme on peut le constater, les attributs du fichier copié sont différents du fichier d’origine.
Afin de préserver les attributs il est nécessaire d’utiliser l’option « -p » comme ci-dessous :

Copier en écrasant sans demande de confirmation

L’option -f ( --force), permet de forcer la copie. Si un fichier de destination existe déjà alors ce dernier sera directement écrasé sans avertissement (sans demande de confirmation). Ci-dessous voici un exemple d’utilisation dans lequel nous écrasons le fichier de destination déjà existant.

Si le fichier de destination (fic2) existe déjà, la commande cp l’écrase, sans poser de question.

Copier sans écraser les fichiers cibles éventuellement déjà existants

Lorsqu’on copie, il peut être lorsqu’on copie des fichiers dans un répertoire de ce préoccuper de ce qui va être écrasé ou non. Si vous souhaitez copier des fichiers sans écraser ceux qui pourraient éventuellement déjà exister, la commande cp dispose de l’option -n ( --no-clobber).

Si le fichier de destination « /etc/passwd » existe déjà alors ce dernier sera conservé.

Ecraser le fichier cible de destination uniquement si le fichier source est plus récent

Il peut être utile lors d’une mise à jour d’écraser uniquement les fichiers cibles plus anciens que les fichiers source.
Dans l’exemple ci-dessous nous copions le fichier ‘fica’ vers ‘ficb’.

Copie et écrase le fichier cible « ficb » uniquement si « fica » est plus récent.

Créer un lien en dur d’un fichier (au lieu de le copier)

Lorsque vous exécutez la commande cp, il est possible de créer un lien en dur d’un fichier (au lieu de le copier). Dans l’exemple suivant un lien en dur du fichier file.c est créé dans le répertoire test.

Créer le lien symbolique d’un fichier (au lieu de le copier)

Lorsque vous exécutez la commande cp, il est possible de créer le lien symbolique d’un fichier (au lieu de le copier). Dans l’exemple suivant un lien symbolique libXv.so du fichier libXv.so.1.0.0 est créé.

Afficher l’aide mémoire de la commande cp

Pour afficher l’aide mémoire de la commande cp, il vous suffira de taper la commande suivante :

Commentaires
  • Yossef dit :

    Bravo , intéressant et clair.

    mais l’option -n ne fonctionne pas chez moi/!

    elle n’apparait meme pas dans le –help

    • Romain dit :

      Quel est ta version de la commande cp? De mon coté j’ai la version 8.5.

      root@debian:~$ cp –version
      cp (GNU coreutils) 8.5
      Copyright © 2010 Free Software Foundation, Inc.

      Cette dernière comporte l’option -n (–no-clober)

  • nadir dit :

    Bonjour j’ai un petit souci, je voudrais copier un fichier d’un répertoire vers plusieurs sous répertoire d’un autre répertoire, ils sont trop nombreux, copier le même fichiers vers une trentaine de répertoire en ligne de commande est fastidieux, pour être bien claire, je voudrais copier un fichiers ‘fichier.ext’ d’un répertoire ‘/rep1’ vers un autre répertoire ‘/rep2’ et tout ses sous répertoire donc ‘/rep2/srep1’ ‘/rep2/srep2’ ‘/rep2/srep3’ etc…, merci d’avance.

  • jacques dit :

    bonjour,

    je n’arrive pas à copier un ficher de 4,9 Go
    y a-t-il une limite de taille de fichier pour cp ?

    merci

Laisser un commentaire
You must be logged in to comment.