WikiBoard de la plate-forme du B25 -  Besançon25-France

WikiBoard de la plate-forme du B25 - Besançon25-France


WikiniBesancon25   ::       > CmdCopieVeritable

DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur ::
:: Vous êtes ec2-3-21-231-245.us-east-2.compute.amazonaws.com
Cette page provient de https://www.commandeslinux.fr/commande-cp/. Elle a pour objectif de donner, de manière concise, les différentes options importante de la commande cp

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 :
cp [option] source destination


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 ».

cp photo.jpg /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 ».

cp /home/jean/photo.jpg /home/jean/Bureau/image.jpg


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

cp photo.jpg image.jpg


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 :

cp photo.jpg image.jpg  /home/jean/Bureau


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.

cp *.jpg  /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.

cp -r /home/jean/vacances /home/jean/Bureau


Ci-dessous, nous copions plusieurs répertoires :

cp -r vacances/ images/  /home/jean/Bureau


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 :

cp -r prod prod-2


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

cp -r /home/prod /home/prod-2


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

cp -i photo.jpg image.jpg


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 :

cp --backup photo.jpg image.jpg


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):

$ ls -l 
lrwxrwxrwx 1 romain romain 9  8 juil. 13:13 file.c -> ../file.c
 
$ cp file.c /home/romain/
 
$ cd /home/romain/
 
$ ls -l
-rw-r--r-- 1 romain romain    0  8 juil. 13:14 file.c


Pour préserver le lien lors de la copie, faites comme dans l'exemple ci-dessous :
$ ls -l 
lrwxrwxrwx 1 romain romain 9  8 juil. 13:13 file.c -> ../file.c
 
$ cp -d file.c /home/romain/
 
$ cd /home/romain/
 
$ ls -l
lrwxrwxrwx 1 romain romain 9 8 juil. 13:17 file.c -> ../file.c


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 :

root@debian:~$ cp -v /etc/passwd .
« /etc/passwd » -> « ./passwd »


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).

$ ls -l /home/rkusnik/passwd.txt
-rw-r--r-- 1 rkusnik rkusnik 5760 21 avril 19:56 /home/rkusnik/passwd.txt


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 :

cp /home/rkusnik/passwd.txt passwd2.txt


Regardons ensemble les attributs du nouveau fichier :

$ ls -l passwd2.txt
-rw-r--r-- 1 renata renata 5760 21 avril 20:22 passwd2.txt


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 :

cp -p /home/rkusnik/passwd.txt passwd2.txt


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.

cp -f passwd /etc/passwd


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).

cp -n passwd /etc/passwd


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'.

cp -u fica 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.

$ ls -li
8520299 -rw-r--r-- 1 romain romain    0 24 oct.   2014 file.c
 
$ cp -l file.c test/
 
$ ls -li test/file.c
8520299 -rw-r--r-- 2 romain romain 0 24 oct.   2014 test/file.c


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éé.

# ls -l libXv.so.1.0.0
-rwxr-xr-x 1 root root 18776 13 sept.  2013 libXv.so.1.0.0
 
# cp -s libXv.so.1.0.0 libXv.so
 
# ls -l libXv.so
lrwxrwxrwx 1 root root 14 13 sept.  2013 libXv.so -> libXv.so.1.0.0


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 :

$ cp --help


Faire une copie véritable

Afin de copier en gardant les attributs des fichiers et les liens symbolique récusivement

cp /usr/* /usr.tmp/ -rdvp


Utiliser rsync


Cette explication condensée provient des sources suivantes : https://doc.ubuntu-fr.org/rsync et https://debian-facile.org/doc:reseau:rsync

rsync est un outil qui permet de sauvegarder par copies vos données.

Il copie tous les fichiers sources vers la destination que vous avez choisie.
Ensuite, il ne mettra à jour que ceux qui ont été modifiés ou ajoutés. D'où un gain de temps.
De plus, rsync peut aussi être utilisé à travers un réseau.

Syntaxe de base


rsync [option] /source /destination


Deux-trois exemples :


Copie intégralement le fichier ou le répertoire source et son contenu vers destination

rsync -av /source /destination


Copie seulement le contenu du répertoire source dans destination

rsync -av /source/ /destination


Copie les fichiers avec leurs dossiers en préservant leurs propriétés respectives.
En root bien sûr :

rsync -r -avz /source/ /destination


Pour une gestion du port ssh, utiliser la syntaxe suivante:

rsync -avz chemin/source/ -e "ssh -p port" user@ip:"/chemin/de destination avec espaces/"


ou

rsync -avz -e "ssh -p port" user@ip:chemin/source/ "/chemin/de destination avec espaces/"



reprise d'un transfert


Lors d'un téléchargement distant par ssh, en cas de coupure, reprendre le transfert avec la commande :

rsync --partial --progress --rsh=ssh [source] [user]@[host]:[destination]


Exemple:

rsync --partial --progress --rsh=ssh fichier nom_user@hostName:/repertoire_receveur/


Les options :



OPTIONS ACTION

Il est tout à fait possible de créer des scripts pour automatiser le processus de sauvegarde.


Exemple de sauvegarde de son répertoire utilisateur vers un disque externe


rsync -r -t -x -v -n --progress -l -s --filter "- /.cache/" --filter "- /.thumbnails/" --filter "+ jeVeuxCeluiCi.txt" /home/utilisateur/ /media/DisqueExterne/repertoire_sauvegarde/ | more



Le fait d'ajouter |more à la fin de la commande permet de faire défiler manuellement et de voir se qui va se passer en appuyant sur la touche espace

Une fois que vous avez vu le résultat de la commande et que cela vous va, enlevez -n et | more et appuyez sur entrée, la sauvegarde se fait pour de vrai. 8-)

rsync -r -t -x -v --progress -l -s --filter "- /.cache/" --filter "- /.thumbnails/" /home/utilisateur/ /media/DisqueExterne/repertoire_sauvegarde/

Commentaires [Cacher commentaires/formulaire]