Copier des fichiers ou répertoire dans un terminal sur Linux

Lorsque l'on se trouve dans un terminal sur Linux, on peut avoir besoin de copier des fichiers ou répertoires.
Cela peut être des copies d'un répertoire local.
Pour cela, il existe plusieurs commandes comme cp, rsync ou scp.

Cet article vous donne plusieurs solutions pour copier des fichiers ou dossier sur Linux depuis un terminal.

Copier des fichiers ou répertoire dans un terminal sur Linux

Copier des fichiers ou répertoire avec cp

La commande cp permet de copier des fichiers en local.
C'est donc la commande la plus utile dans ce cas de figure.

Plusieurs options sont disponibles, voici la liste :

Les optionsDescription
-v(verbose) : affiche la progression de plusieurs fichiers copiés
--backupFais une sauvegarde de chaque fichier de destination existant
–p(préserve) : conserve les mêmes attributs, comme la date de création et les autorisations de fichier
-f(force) : force la copie en supprimant d'abord un fichier existant
–i (interactive) : demande de confirmation, vivement conseillé
-R(récursif) : copie tous les fichiers et sous-dossiers d'un répertoire
-u(update) : copie uniquement si la source est plus récente que la destination
Les options de la commande cp de Linux

La syntaxe étant la suivante :

cp [Option] [Source] [Destination]

Copie de fichiers avec la commande cp

Voici comment un fichier fichier.txt vers fichier_destination.txt :

cp fichier.txt fichier_destination.txt

Bien entendu, on peut tout à faire indiquer le répertoire source ou de destination.
Dans ces deux exemples, on ne spécifie pas le fichier de destination, la commande cp garde alors le nom du fichier.

cp fichier.txt /home/malekalmorte/sousdossier/
cp /root/fichier.txt /home/malekalmorte/sousdossier/

Mais si on veut copier fichier.txt avec un nouveau nom fichier_destination.txt :

cp fichier.txt /home/malekalmorte/sousdossier/fichier_destination.txt
cp /root/fichier.txt /home/malekalmorte/sousdossier/fichier_destination.txt

Pour conserver les métadonnées comme la date du fichier, les attributs, autorisations et attributs, on utilise l'option -p :

cp -p fichier.txt fichier_destination.txt

Copie de répertoires avec la commande cp

Pour copier un fichier dans un répertoire, spécifiez le chemin absolu ou relatif du répertoire. Lorsque le répertoire de destination est omis, le fichier est copié dans le répertoire en cours.

cp fichier.txt /home/malekalmorte/

Si vous souhaitez copier le fichier sous un nom différent, vous devez spécifier le nom de fichier souhaité :

cp fichier.txt /home/malekalmorte/fichier_destination.txt

Copier un fichier dans un répertoire

Pour copier plusieurs fichiers et répertoires à la fois, spécifiez les noms des fichiers et répertoires source suivis du répertoire de destination comme dernier argument :

cp fichier.txt /home/malekalmorte/ fichier1.txt fichier.txt /home/kevin/

On peut aussi utiliser le caractère joker (wildcard) pour copier tous les fichiers avec une même extension.
Par exemple pour copier tous les fichiers PNG :

cp *.png /home/malekalmorte/

Mais cela fonctionne aussi pour les noms de fichiers, par exemple si vous avez des fichiers image1.png image2.png image3.png et ainsi de suite... pour toutes les copier :

cp image*.png /home/malekalmorte/

Notez que l'on aurait pu aussi utiliser cette syntaxe pour copier les fichiers de 1 à 9 :

cp image{1,9}.png /home/malekalmorte/

Copier plusieurs fichiers en récursif

Pour copier un répertoire, y compris tous ses fichiers et sous-répertoires, utilisez l'option -R ou -r.
C'est une copie alors récursive qui copie l'arborescence complète avec l'ensemble des sous-dossiers.

Elle créera le répertoire de destination et copiera récursivement tous les fichiers et sous-répertoires de la source vers le répertoire de destination.

Dans l'exemple suivant, nous copions le répertoire images vers images_backup :

cp -R images images_backup

Si le répertoire de destination existe déjà, le répertoire source lui-même et son contenu sont copiés dans le répertoire de destination.
Pour copier uniquement les fichiers et sous-répertoires mais pas le répertoire cible, utilisez l'option -T :

cp -RT images images_backup

Sauvegarder le fichier à copier avant écrasement

La commande cp vous permet de sauvegarder le fichier si le fichier se trouve dans le répertoire cible à l'aide de l'option --backup.

Dans cet exemple, nous copions le fichier /home/malekalmorte/fichier.txt vers /home/kevin/fichier.txt.
Comme ce dernier existe, un message de demande d'écrasement s'affiche :

cp --backup /home/malekalmorte/fichier.txt /home/kevin/
cp: overwrite ‘/home/kevin/fichier.txt’? y

si vous répondez oui, cela va remplacer le fichier fichier.txt par celui copier mais l'OS va aussi créer une sauvegarde du précédent sous le nom de fichier /home/kevin/fichier.txt~.
il ajoute un ~ à la fin du fichier.

Copier une arborscence en récursif et exclure un répertoire spécifique

On arrive ensuite à des situations spécifiques.
Par exemple une arborescence avec des sous-dossiers et vous souhaitez copier celle-ci en excluant un ou plusieurs sous-dossiers.
Plusieurs solutions sont possibles.

En illustration, on utilisera cette arborescence.

La première consiste à utiliser la commande cp en exécutant la commande ls puis en excluant ce que l'on souhaite avec egrep :

cp -r `ls -A | egrep -v "source1|source2"

Par exemple ici on copie l'arborescence en excluant le sous-dossier dest2 et dest3 :

cp -v `ls -A|egrep -v "dest2|dest3"` /tmp/demo2

Dans cet autre solution, on utilise la commande find pour trouver les répertoires et exclure certains sous-dossiers.
Enfin avec l'option -exec on effectue la copie

find . -type f -not -iname '*/dossier-exclus1/*' -not -iname '*/dossier-exclus2/*' -exec cp '{}' '/dest/{}' ';'

Plus de détails sur l'utilisation de find :

Enfin une autre solution avec rsync qui permet de copier de manière identique une source et une destination

rsync -av --progress dossiersource /dossierdestination --exclude dossier1 --exclude dossier2

Copier des fichiers vers une machine distante

avec SCP

SCP (Secure Copy) est un utilitaire et protocole pour copier des fichiers à travers le protocole SSH.
On peut donc l'utiliser pour copier et transférer des fichiers d'une machine à une machine distante.

Voici la syntaxe :

scp /chemin/fichier <user>@<host>:/chemin/fichier

Pour plus d'explications :

avec rsync

rsync est un utilitaire qui permet de synchroniser un dossier.
Il fonctionne aussi pour synchroniser des dossiers vers une machine distante.

La syntaxe est la suivante :

rsync -artvu ~/dir1 <nomutilisateur>@<machine_distance>:destination_rep

Pour plus d'exemple d'utilisation rsync, suivez cet article complet :

Tags: