cp -r
est destiné à copier des fichiers de manière récursive et cp -R
à copier des répertoires de manière récursive. Mais j'ai vérifié, et les deux semblent copier les fichiers et les répertoires, la même chose. Alors, quelle est la différence en réalité?
61
Réponses:
Bien que
-R
posix soit bien défini, ce-r
n’est pas portable!Sous Linux, dans les implémentations GNU et BusyBox de
cp
,-r
et-R
sont équivalentes.De l'autre côté, comme vous pouvez le lire dans la page de manuel POSIX de
cp
, le-r
comportement est défini par l'implémentation .la source
-r
copiera les fichiers réels pointés par des liens symboliques tout-R
en copiant le lien symbolique qui est ce à quoi il est destiné la plupart du temps.La différence est que l’un utilise un "R" minuscule et l’autre un "R" majuscule. Au-delà de ça, pas de différence. Même chose si vous utilisez l'
--recursive
option longue.la source
cp
il y a en fait une distinction. Voir la réponse de Random832 . @ Ignacio, vous devriez inclure un qualificatif dans cette réponse qui indique "si vous êtes l'cp
implémentation GNU moderne" ou quelque chose comme ça.-R
uniquement, et certaines des pages de manuel des systèmes que nous venons de mentionner le recommandent également.La minuscule
-r
était une option plus ancienne, introduite dans 4.1BSD, qui copiait simplement tous les non-répertoires sous forme de fichiers. C'est-à-dire que s'il rencontrait un périphérique ou une FIFO, il l'ouvrirait, en lirait le contenu et créerait un fichier à la destination avec le contenu.Les majuscules
-R
étaient une option standardisée (introduite dans BSD sous 4.4BSD, bien que les versions précédentes le désignent comme synonyme-r
) qui, lorsqu’un périphérique, une FIFO ou un autre fichier spécial serait créé, créeraient un fichier spécial équivalent sur la destination.De nombreuses implémentations maintiennent toujours cette distinction, mais certaines (y compris la version GNU typique de Linux) ne fournissent que la
-R
sémantique, avec-r
un synonyme.la source
Sous OS X et dans les anciennes versions de FreeBSD,
-r
vous-R -L --copy-contents
faites comme dans Coreutils, ou suivez les liens symboliques et lisez 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 sous OS X,mkdir a;mkfifo a/b;cp -r a c
est bloqué lors de la lecture de la FIFO etmkdir a;ln -s /dev/zero a;cp -r a b
commence à se remplirb/zero
de zéros.Depuis la
cp
page de manuel sous OS X et les anciennes versions de FreeBSD:Dans les nouvelles versions de FreeBSD
-r
est équivalent à-RL
:http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :
la source
Une des différences que j'ai trouvées est que -r ne copie pas les répertoires cachés tandis que -R copie les répertoires cachés.
J'ai testé le répertoire .git dans le répertoire cible et suis parvenu à la conclusion ci-dessus. J'utilise actuellement centOS.
Je peux me tromper mais c'est ouvert à la discussion.
la source
-r
et les-R
deux copient des répertoires cachés