Categories: Technologie

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

Cp est l’une des commandes Unix de base. 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 tout le temps la commande cp, un ou plusieurs des exemples expliqués ci-dessous peuvent être nouveaux pour vous.
La forme générale de la commande de copie:

cp [option] source destination

1. Copiez 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 vers un autre avec le même nom, seul le nom du répertoire de destination est suffisant pour 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. Copiez plusieurs fichiers ou répertoires

Vous pouvez copier plusieurs fichiers de la source vers 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/
dd

3. Sauvegarder avant de copier vers une destination

Dans le cas où le fichier de destination existe déjà avec le même nom, cp vous permet de sauvegarder le fichier de destination avant de l’écraser.
Dans cet exemple, readme.txt existe à la fois dans le répertoire project / et projectbackup / et lors de la 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 a été copié en tant que readme.txt comme indiqué ci-dessous.

$ cd / home / thegeekstuff / projectbackup / 
$ ls -l 
-rw-r – r– 1 bala geek 1020 8 janvier 13:36 readme.txt  En parlant de sauvegardes, il est important de comprendre comment fonctionne la commande rsync pour sauvegarder efficacement les fichiers.
-rw-r - r-- 1 bala geek 1038 8 gennaio 13:15 readme.txt ~ 

4. Gardez 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 simplement copier le lien tel qu’il est, 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): pour conserver le lien lors de la copie, procédez comme suit:

$ cd project / bin
$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 gen 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 8 gennaio 14:02 startup.sh

$ cd project / bin
$ cp -d startup.sh / home / thegeekstuff / projectbackup / bin /
$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 gen 8 14:10 startup.sh -> ../test/startup.sh

5. Ne remplacez pas un fichier existant

Si vous souhaitez copier uniquement lorsque le fichier cible n’existe pas, utilisez l’option -n comme indiqué ci-dessous. Cela n’écrasera pas le fichier existant et la commande cp retournera avec succès le code de sortie comme indiqué ci-dessous: Comme vous le voyez ci-dessous, le fichier cible n’a pas été écrasé.

$ cd projectbackup

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

$ cd ../project

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

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

$ echo $?
0

$ cd projectbackup

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

6. Confirmation avant écrasement (mode interactif)

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

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

7. Créez un vrai lien vers un fichier (au lieu de le copier)

Lorsque vous exécutez la commande cp, vous pouvez créer un véritable lien vers le fichier (au lieu de le copier). L’exemple suivant crée le lien réel pour le fichier sample.txt dans le répertoire test /. Comme indiqué ci-dessus, test / sample.txt est un fichier lié au fichier sample.txt et l’inode des deux fichiers est le même.

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

$ cp -l test sample.txt /

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

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

Lorsque vous exécutez la commande cp, vous pouvez créer un lien logiciel 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 19 novembre 2010 libFS.so.6.0.0
# cp -s libFS.so.6.0.0 libFS.so
# ls -l libFS.so
lrwxrwxrwx 1 root root 14 gen 9 20:18 libFS.so -> libFS.so.6.0.0

9. Conservez 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: Vous pouvez également conserver uniquement les propriétés requises telles que le mode, les propriétés, l’horodatage, etc., l’ exemple suivant conserve le mode d’un fichier lors de la copie:

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

$ cp -p sample.txt test /

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

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

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

La copie ne prend pas longtemps pour un petit fichier, mais elle peut prendre beaucoup de temps lors de la copie d’un gros fichier. Ainsi, lorsque vous copiez un fichier volumineux, vous pouvez vous assurer de ne le faire que lorsque le fichier source est plus récent que le fichier cible ou lorsque le fichier cible est manquant à l’aide de l’option -u comme indiqué ci-dessous.

Dans cet exemple, les deux fichiers LICENSE et readme.txt seront copiés du projet / vers le projectbackup /. Cependant, le fichier LICENSE existe déjà dans le répertoire projectbackup / et est plus récent que celui dans le 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

Dans cet exemple, vous n’avez donc pas besoin de copier le fichier LICENCE dans le répertoire projectbackup /. Ceci est géré automatiquement par la commande cp, si vous utilisez l’option -u comme indiqué ci-dessous. Dans l’exemple suivant, seul le fichier readme.txt a été copié comme indiqué par l’horodatage dans 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

ishant

Recent Posts

Traitement des troubles de l’alimentation : connaissez vos options

Les traitements des troubles de l'alimentation incluent la thérapie, l'éducation et les médicaments. Découvrez ce…

6 jours ago

Comment gérer le rejet des applications de rencontres ?

Je suis sur Bumble and Hinge depuis quelques mois maintenant et j'ai rencontré plusieurs personnes…

6 jours ago

13 signes indiquant qu’il est temps de suivre une thérapie de couple

Être capable de reconnaître les signes de relations malsaines est essentiel pour savoir quand suivre…

6 jours ago

Comment soutenir la santé mentale au travail

Pour beaucoup d’entre nous, le travail constitue une partie importante de notre vie. C'est là…

1 semaine ago

Tous les codes Genshin Impact du flux en direct 5.0

Recevez les dernières diffusions en direct de Primogems pendant qu'elles sont disponibles. Lorsque vous achetez…

3 mois ago

Comment obtenir toutes les évolutions d’Évoli dans Pokemon GO

La mise à jour Mythical Wishes a ajouté un nouveau sous-type Eeveelution à  Pokemon GO  : Eevee…

3 mois ago