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.

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/copierapport.txtetrapport.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.
-idemande confirmation avant chaque écrasement.-fforce l’écrasement, y compris quand la destination est protégée en écriture.-nn’écrase jamais un fichier existant.-bsauvegarde 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 -idè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
-Pcopie le lien symbolique lui-même, sans suivre sa cible.-scrée un lien symbolique au lieu de copier les données.-lcré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.


