GNU/Linux >> Tutoriels Linux >  >> Linux

Comment copier des fichiers sous Linux et Unix ? 10 exemples de commandes cp

cp est l'une des commandes de base sous Unix. Vous savez déjà qu'il est utilisé pour copier un ou plusieurs fichiers ou répertoires de la source vers la destination.

Bien que ce didacticiel soit destiné aux débutants, il est également utile pour tout le monde de passer rapidement en revue diverses options de commande cp à l'aide d'exemples pratiques.

Même si vous utilisez la commande cp tout le temps, un ou plusieurs exemples expliqués ci-dessous pourraient être nouveaux pour vous.

La forme générale de la commande de copie :

cp [option] source destination

1. Copier un fichier ou un répertoire de la source vers la destination

Pour copier un fichier, vous devez transmettre la source et la destination à la commande de copie. L'exemple suivant copie le fichier de project/readme.txt vers projectbackup/readme-new.txt

$ cp project/readme.txt projectbackup/readme-new.txt

$ cd projectbackup/

$ ls
readme-new.txt

Si vous souhaitez copier un fichier d'un dossier à un autre avec le même nom, seul le nom du répertoire de destination suffit, comme indiqué ci-dessous.

$ cp project/readme.txt projectbackup/

$ cd projectbackup/

$ ls
readme.txt

Un répertoire (et tout son contenu) peut être copié de la source vers la destination avec l'option récursive -r comme indiqué ci-dessous :

$ ls project
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

$ cp -r project/ backup/

$ ls backup
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

2. Copier plusieurs fichiers ou répertoires

Vous pouvez copier plusieurs fichiers de la source à la destination, comme indiqué ci-dessous :

$ cd src/
$ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/

Si les fichiers source ont un modèle commun, utilisez des caractères génériques comme indiqué ci-dessous. Dans cet exemple, tous les fichiers d'extension c sont copiés dans le répertoire /home/thegeekstuff/projectbackup/src/.

$ cp *.c /home/thegeekstuff/projectbackup/src/

Copiez plusieurs répertoires comme indiqué ci-dessous.

$ cd project/

$ cp -r src/ bin/ /home/thegeekstuff/projectbackup/

3. Sauvegarder avant de copier dans une destination

Dans le cas où le fichier de destination est déjà présent avec le même nom, alors cp vous permet de sauvegarder le fichier de destination avant de l'écraser.

Dans cet exemple, le fichier readme.txt existe à la fois dans les répertoires project/ et projectbackup/, et lors de sa copie de project/ vers projectbackup/, le fichier readme.txt existant est sauvegardé comme indiqué ci-dessous :

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp --backup readme.txt  /home/thegeekstuff/projectbackup/

Le fichier existant a été déplacé vers readme.txt~ et le nouveau fichier copié sous readme.txt comme indiqué ci-dessous.

$ cd /home/thegeekstuff/projectbackup/
$ ls -l
-rw-r--r-- 1 bala geek 1020 Jan  8 13:36 readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt~

En parlant de sauvegarde, il est important que vous compreniez comment la commande rsync fonctionne pour sauvegarder efficacement les fichiers.

4. Conserver les liens lors de la copie

Lorsque vous exécutez la commande cp, si la source est un fichier de lien, le fichier réel est copié et non le fichier de lien. Si vous souhaitez uniquement copier le lien tel quel, spécifiez l'option -d comme indiqué ci-dessous :

Ce qui suit montre que sans l'option -d, il copiera le fichier (et non le lien) :

$ cd project/bin

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 13:59 startup.sh -> ../test/startup.sh

$ cp startup.sh /home/thegeekstuff/projectbackup/bin/

$ cd /home/thegeekstuff/projectbackup/bin/

$ ls -l
-rw-r--r--  1 root root       102 Jan  8 14:02 startup.sh

Pour conserver le lien lors de la copie, procédez comme suit :

$ cd project/bin

$ cp -d startup.sh /home/thegeekstuff/projectbackup/bin/

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 14:10 startup.sh -> ../test/startup.sh

5. Ne pas écraser un fichier existant

Si vous souhaitez copier uniquement lorsque le fichier de destination n'existe pas, utilisez l'option -n comme indiqué ci-dessous. Cela n'écrasera pas le fichier existant et la commande cp renverra avec le code de sortie réussi comme indiqué ci-dessous :

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp -n readme.txt /home/thegeekstuff/projectbackup/bin/

$ echo $?
0

Comme vous le voyez ci-dessous, le fichier de destination n'a pas été écrasé.

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

6. Confirmer avant d'écraser (mode interactif)

Lorsque vous utilisez l'option -i, une confirmation vous sera demandée avant d'écraser un fichier, comme indiqué ci-dessous.

$ cp -i readme.txt /home/thegeekstuff/projectbackup/
cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y

7. Créer un lien physique vers un fichier (au lieu de le copier)

Lorsque vous exécutez la commande cp, il est possible de créer un lien physique du fichier (au lieu de copier le fichier). L'exemple suivant crée le lien dur pour le fichier sample.txt dans le répertoire test/,

$ ls -li sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -l sample.txt test/ 

$ ls -li test/sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Comme vu ci-dessus, le test/sample.txt est un fichier lié en dur au fichier sample.txt et l'inode des deux fichiers est le même.

8. Créer un lien logiciel vers un fichier ou un répertoire (au lieu de le copier)

Lorsque vous exécutez la commande cp, il est possible de créer un lien symbolique vers un fichier ou un répertoire. Dans l'exemple suivant, un lien symbolique est créé pour libFS.so.6.0.0 en tant que libFS.so,

# cd /usr/lib/

# ls -l libFS.so.6.0.0
-rw-r--r-- 1 root root 42808 Nov 19  2010 libFS.so.6.0.0

# cp -s libFS.so.6.0.0 libFS.so

# ls -l libFS.so
lrwxrwxrwx 1 root root 14 Jan  9 20:18 libFS.so -> libFS.so.6.0.0

9. Conserver les attributs du fichier ou du répertoire lors de la copie

En utilisant l'option -p, vous pouvez conserver les propriétés d'un fichier ou d'un répertoire comme indiqué ci-dessous :

$ ls -l sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -p sample.txt test/ 

$ ls -l test/sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Il est également possible de ne conserver que les propriétés requises telles que le mode, la propriété, les horodatages, etc.

L'exemple suivant préserve le mode d'un fichier lors de sa copie :

$ cp --preserve=mode sample.txt test/

10. Copier uniquement lorsque le fichier source est plus récent que la destination ou manquant

La copie ne prend pas beaucoup de temps pour un petit fichier, mais cela peut prendre beaucoup de temps lorsqu'un fichier volumineux est copié. Ainsi, lors de la copie d'un gros fichier, vous voudrez peut-être vous assurer de ne le faire que lorsque le fichier source est plus récent que le fichier de destination, ou lorsque le fichier de destination est manquant en utilisant l'option -u comme indiqué ci-dessous.

Dans cet exemple, les deux fichiers LICENSE et readme.txt seront copiés de project/ vers projectbackup/. Cependant, le fichier LICENSE existe déjà dans le répertoire projectbackup/ et est plus récent que celui du répertoire project/.

$ cd project/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek 108 Jan  8 13:14 LICENSE
-rw-r--r-- 1 bala geek 32 Jan  8 13:16 readme.txt

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
ls: cannot access readme.txt: No such file or directory
-rw-r--r-- 1 root root 112 Jan  9 20:31 LICENSE

Ainsi, dans cet exemple, il n'est pas nécessaire de recopier le fichier LICENSE dans le répertoire projectbackup/. Ceci est automatiquement pris en charge par la commande cp, si vous utilisez l'option -u comme indiqué ci-dessous. Dans l'exemple ci-dessous, seul le fichier readme.txt a été copié comme indiqué par l'horodatage sur le fichier.

$ cp -u -v LICENSE readme.txt  /home/thegeekstuff/projectbackup/
`readme.txt' -> `/home/thegeekstuff/projectbackup/readme.txt'

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek  112 Jan  9 20:31 LICENSE
-rw-r--r-- 1 bala geek   32 Jan  9 22:17 readme.txt

Linux
  1. Comment compresser des fichiers et des répertoires sous Linux (avec exemples)

  2. Comment compresser et décompresser des fichiers sous Linux

  3. Comment rechercher des fichiers avec la commande fd sous Linux

  4. Comment utiliser la commande Rsync sous Linux ?

  5. Exemples de commandes Linux Objcopy pour copier et traduire des fichiers objets

Comment installer Rclone sous Linux et Unix

Comment copier des fichiers sous Linux à l'aide de la commande CP

Comment copier des fichiers et des répertoires dans un terminal Linux

Commande Cat sous Linux :Exemples essentiels et avancés

Commande ls sous Linux/UNIX

commande cp sous Linux/UNIX