La commande cp Linux : copier sans rien écraser par erreur

Terminal Linux affichant une commande cp sur un écran d'ordinateur portable posé sur un bureau

Sommaire

Quelle commande cp pour votre cas ?

Que voulez-vous copier ?

Temps de lecture estimé : 5 minutes

Points clés à retenir

  • cp source destination copie un fichier, et cp -r un dossier entier.
  • Par défaut, cp écrase sans prévenir : utilisez -i, -n ou –backup=numbered.
  • cp -a conserve droits, dates et liens symboliques.
  • Utilisez — avant des jokers pour éviter qu’un nom de fichier soit pris pour une option.
  • Pour les gros volumes ou la progression, préférez rsync.

À quoi sert la commande cp et quelle est sa syntaxe

La commande cp Linux copie un fichier ou un dossier d’un endroit à un autre, avec la syntaxe cp source destination. Le fichier d’origine reste en place, et une copie apparaît à la destination.

Le nom vient de l’anglais « copy ». C’est l’une des commandes que j’utilise le plus au quotidien, et aussi l’une de celles qui réservent le plus de mauvaises surprises quand on la tape trop vite.

Copier un fichier vers un dossier en gardant son nom

Si la destination est un dossier existant, le fichier y est copié sous son nom d’origine.

cp rapport.txt /tmp/
ls /tmp/rapport.txt
/tmp/rapport.txt

Copier en donnant un nouveau nom

Si la destination n’est pas un dossier existant, cp la traite comme le nom de la copie.

cp rapport.txt rapport-v2.txt

Attention : si rapport-v2.txt existe déjà, cp l’écrase sans prévenir. Nous y reviendrons plus bas.

cp Linux : les réflexes à connaître : Syntaxe de base, Copier un dossier : -r, Éviter l'écrasement, Tout conserver : -a, Jokers et --, Gros volumes : rsync
Avec cp, on copie fichiers et dossiers en maîtrisant -r, -i, -n, -a et — pour ne rien écraser ni conserver par erreur.

Copier plusieurs fichiers

Pour copier plusieurs fichiers d’un coup, on les liste, le dernier argument devant être un répertoire : cp fichier1 fichier2 fichier3 repertoire.

Pour voir la commande cp en action, la chaîne Cloud for everything propose un tutoriel en français qui détaille son utilisation pas à pas.

  • Jokers : cp *.png images/ copie toutes les images PNG du dossier courant.
  • Accolades : cp rapport.{txt,pdf} archives/ copie rapport.txt et rapport.pdf.

Le danger des jokers

Un fichier dont le nom commence par un tiret, par exemple -r, peut être interprété comme une option quand le joker s’étend. Pour l’éviter, je place -- avant les noms de fichiers : cp -- *.txt sauvegarde/. Tout ce qui suit est alors lu comme un nom, jamais comme une option.

Copier un répertoire avec cp -r

Pour copier un dossier, il faut ajouter -r. Sans cette option, cp refuse et affiche un message du type « omission du répertoire ».

cp -r Fichiers/ /tmp/Sauvegarde

Sous GNU/Linux, -r et -R fonctionnent tous les deux et donnent le même résultat. La documentation IBM utilise -R pour copier un répertoire, par exemple cp -R /home/accounts/customers /home/accounts/vendors, mais elle décrit AIX, pas Linux.

Le piège du slash final et de la destination

Le résultat dépend de l’existence de la destination. Si /tmp/Sauvegarde existe déjà, le dossier source est copié à l’intérieur, soit /tmp/Sauvegarde/Fichiers. Si elle n’existe pas, la copie prend ce nom. Je vérifie toujours avec ls avant de lancer la commande.

Afficher le détail avec -v

L’option -v (verbeux) liste chaque fichier copié. Un exemple courant est cp -Rv Fichiers/ /tmp/Sauvegarde20220829, qui copie le dossier sous un autre nom tout en affichant chaque opération.

Éviter d’écraser ou de perdre des fichiers

Par défaut, cp écrase silencieusement la destination si elle existe, sauf si votre shell définit un alias avec -i. Quatre options protègent vos données.

  • -i demande confirmation avant chaque écrasement.
  • -f force l’écrasement, y compris quand la destination est protégée en écriture.
  • -n n’écrase jamais un fichier existant.
  • -b sauvegarde l’ancienne version avant de la remplacer.

Sauvegarder avec –backup=numbered

Avec cp --backup=numbered text.txt dossier/, les anciennes versions reçoivent un suffixe numéroté. On obtient alors text.txt, text.txt.~1~, text.txt.~2~, text.txt.~3~. Le signe égal est unique : certaines pages écrivent == par erreur, ce qui ne fonctionne pas.

Pour ma part, je prends l’habitude de taper cp -i dès que la destination n’est pas un dossier vide. Ce réflexe m’a évité plusieurs pertes de fichiers.

Conserver droits, dates et liens

Une copie simple change le propriétaire et la date de modification : le nouveau fichier appartient à celui qui lance la commande, avec la date du jour. Pour conserver les métadonnées, utilisez -a (archive).

cp -a /var/www/site /sauvegarde/

L’option -a copie récursivement et préserve droits, dates et liens symboliques. Pour un contrôle plus fin, --preserve accepte une liste, par exemple --preserve=ownership,timestamps,context.

Liens symboliques et physiques

  • -P copie le lien symbolique lui-même, sans suivre sa cible.
  • -s crée un lien symbolique au lieu de copier les données.
  • -l crée un lien physique : le fichier garde un seul contenu sur le disque, accessible sous deux noms.

Limites de cp et alternatives

cp suffit pour la plupart des copies locales, mais il n’affiche aucune progression et ne reprend pas une copie interrompue. Pour les gros volumes, je me tourne vers rsync, que recommande aussi debian-facile.org en évoquant un gain de vitesse de plus d’un tiers. Ce chiffre n’est ni sourcé ni détaillé, je le prends donc comme un ordre d’idée.

Afficher la progression

Avec rsync, l’option --progress affiche l’avancement : rsync -a --progress source/ destination/. Elle indique aussi le volume transféré fichier par fichier.

Copier vers une machine distante

cp ne travaille qu’en local. Pour une machine distante, scp fichier.txt utilisateur@serveur:/chemin/ ou rsync par SSH font le travail.

cp ou mv

cp duplique, mv déplace ou renomme sans laisser d’original. Si vous voulez seulement renommer un fichier, mv est plus adapté et évite de doubler l’espace occupé.

Questions fréquentes

Comment afficher la progression d’une copie avec cp sous Linux ?

cp ne propose pas de barre de progression native. L’option -v liste les fichiers au fur et à mesure, et rsync -a --progress affiche un avancement détaillé.

Comment forcer l’écrasement d’un fichier avec cp sous Linux ?

Utilisez cp -f source destination. Si la destination existe et ne peut être ouverte, cp la supprime puis retente la copie. Par défaut cp écrase déjà, donc -f sert surtout à passer outre un alias -i ou une protection en écriture. Maîtriser la commande cp Linux, c’est surtout savoir quand elle écrase.

Picture of Jérémy Moreau
Jérémy Moreau

Jérémy, rédacteur en chef de Nexustrat, est spécialisé dans l’analyse des mutations technologiques et leurs impacts sur le monde du travail. Diplômé en journalisme et expert des enjeux High-Tech, il a pour mission de connecter innovation, business et développement professionnel au service d’une communauté de lecteurs exigeants.

Nos derniers articles
Rejoignez notre Newsletter