Skip to content
Tiantan
Articles

La différence entre cp -r et cp -R (commande de copie)

On février 18, 2021 by admin

cp -r est destinée à copier des fichiers de manière récursive, et cp -R pour copier des répertoires de manière récursive. Mais jai vérifié, et les deux semblent copier les fichiers et les répertoires, la même chose. Alors, quelle est la différence en fait?

Commentaires

  • Chaque mention de ces options dans les manuels Linux indique quelles ‘ sont des synonymes. (Ils ‘ ne sont pas sur dautres variantes dUnix.)

Réponse

Alors que -R est posix bien défini, -r nest pas portable!

Sous Linux, dans les implémentations GNU et BusyBox de cp, -r et -R sont équivalentes.

De lautre côté, comme vous pouvez le lire dans la page de manuel POSIX de cp , -r comportement est défini par limplémentation .

 * If neither the -R nor -r options were specified, cp shall take actions based on the type and contents of the file referenced by the symbolic link, and not by the symbolic link itself. * If the -R option was specified: * If none of the options -H, -L, nor -P were specified, it is unspecified which of -H, -L, or -P will be used as a default. * If the -H option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand. * If the -L option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand or any symbolic links encoun- tered during traversal of a file hierarchy. * If the -P option was specified, cp shall copy any symbolic link specified as a source_file operand and any symbolic links encoun- tered during traversal of a file hierarchy, and shall not follow any symbolic links. * If the -r option was specified, the behavior is implementation- defined. 

Commentaires

  • Une des différences serait que, dans OSX par exemple, -r copiera les fichiers réels pointés par des liens symboliques tandis que -R copiez le lien symbolique auquel il est destiné la plupart du temps.

Réponse

Minuscules -r était une option plus ancienne, introduite dans 4.1BSD, qui copiait simplement tous les non-répertoires sous forme de fichiers. Autrement dit, sil rencontrait un périphérique ou un FIFO, il louvrirait, lirait le contenu et créerait un fichier à la destination avec le contenu.

Majuscules -R était une option standardisée (introduite dans BSD dans BSD 4.4, bien que les versions précédentes laient comme synonyme de -r) qui, en rencontrant un périphérique, FIFO ou autre fichier spécial, créer un fichier spécial équivalent à la destination.

De nombreuses implémentations maintiennent encore cette distinction, mais certaines (y compris la version GNU typique de Linux) ne fournissent que le -R sémantique, avec -r comme synonyme.

Réponse

La différence est que lun utilise un « R » minuscule et lautre un « R » majuscule. Au-delà, aucune différence. Même chose si vous utilisez loption longue --recursive.

Commentaires

  • Depuis la page de manuel: – R, -r, –recursive – copie les répertoires de manière récursive
  • @DaveJennings: Ce nest pas parce quils sont équivolents sur une plate-forme que ‘ quils sont sur tous. Sur certaines implémentations de cp, il y a en fait une distinction. Voir la réponse de Random832 ‘ . @Ignacio, vous devez inclure un qualificatif dans cette réponse indiquant  » si votre cp est limplémentation GNU moderne  » ou quelque chose comme ça.
  • @Caleb: La question est balisée  » linux « . Quest-ce que ce serait dautre?
  • -R et -r donnent un comportement différent sur certains des systèmes que jutilise (OS X, FreeBSD, BusyBox coreutils; je ne sais pas lesquels pour le moment). Jai décidé il y a longtemps quil était prudent de toujours utiliser uniquement -R, et en fait, certaines des pages de manuel sur les systèmes que nous venons de mentionner le recommandent également.

Réponse

Sous OS X et les anciennes versions de FreeBSD -r est comme -R -L --copy-contents dans coreutils, ou il suit les liens symboliques et lit le contenu des fichiers spéciaux et des FIFO.

mkdir a;touch b;ln -s $PWD/b a;cp -r a c remplace le lien symbolique par le fichier cible dans OS X, mkdir a;mkfifo a/b;cp -r a c bloque la lecture du FIFO et mkdir a;ln -s /dev/zero a;cp -r a b commence à remplir b/zero avec des zéros .

Depuis la page de manuel cp sous OS X et les anciennes versions de FreeBSD:

Historic versions of the cp utility had a -r option. This implementation supports that option; however, its use is strongly discouraged, as it does not correctly copy special files, symbolic links, or fifo"s. 

Dans les nouvelles versions de FreeBSD, -r équivaut à -RL:

Historic versions of the cp utility had a -r option. This implementation supports that option, however, its behavior is different from historical FreeBSD behavior. Use of this option is strongly discouraged as the behavior is implementation-dependent. In FreeBSD, -r is a synonym for -RL and works the same unless modified by other flags. Historical imple- mentations of -r differ as they copy special files as normal files while recreating a hierarchy. 

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :

--copy-contents

Si vous copiez de manière récursive, copiez le contenu de tous les fichiers spéciaux (par exemple, les FIFO et les fichiers de périphérique) comme sil sagissait de fichiers normaux. Cela signifie essayer de lire les données de chaque fichier source et de les écrire dans la destination. Cest généralement une erreur dutiliser cette option, car elle a normalement des effets indésirables sur des fichiers spéciaux comme les FIFO et ceux généralement trouvés dans le répertoire /dev.Dans la plupart des cas, cp -R --copy-contents se bloque indéfiniment en essayant de lire des FIFO et des fichiers spéciaux comme /dev/console, et il remplira votre disque de destination si vous lutilisez pour copier /dev/zero. Cette option na aucun effet sauf en cas de copie récursive et naffecte pas la copie des liens symboliques.

Répond

une des différences que jai trouvé que -r ne copie les répertoires cachés tandis que -R copie les répertoires cachés.

Jai testé le répertoire .git dans le répertoire cible et suis arrivé à la conclusion ci-dessus. Jutilise actuellement centOS.

Je me trompe peut-être mais cest ouvert à la discussion.

Commentaires

  • Je ne ‘ t voir ceci sur CentOS 5; -r et -R copient les deux répertoires cachés

Written by admin

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Articles récents

  • En utilisant un balun avec un dipôle résonnant
  • Quelle est la différence entre “ ne peut pas ” et “ ne peut pas ”? [dupliquer]
  • “ Profondément apprécié ” ou “ très apprécié ”
  • Que signifie ' idées abstraites '? [fermé]
  • Pourquoi ' t je ne devrais pas utiliser le cryptage ECB?

Archives

  • février 2021
  • janvier 2021
  • décembre 2020
  • novembre 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top