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

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 jours 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…

4 jours ago

Jouez à ces jeux Roblox avec votre petite amie – ce sont les meilleurs

Les jeux Roblox sont populaires parmi les couples et les amis. Les gens recherchent des…

7 mois ago

Comment éveiller les fruits dans Blox Fruits – Guide d’éveil des fruits

Unawakening Fruits est une mécanique de Blox Fruits que les joueurs peuvent utiliser pour apprendre des mouvements…

8 mois ago

Comment obtenir des bonbons dans Blox Fruits (Roblox 2024)

Blox Fruits is another popular game in the Roblox world. There are several ways to…

8 mois ago

Comment obtenir des os dans Blox Fruits Roblox

Il existe plusieurs façons d’obtenir des os dans Fruits Roblox. Voyons comment :Combattez des squelettes dans…

8 mois ago