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