cp -r
está destinado a copiar archivos de forma recursiva y cp -R
para copiar directorios de forma recursiva. Pero lo he comprobado, y ambos parecen copiar archivos y directorios, lo mismo. Entonces, ¿cuál es la diferencia en realidad?
60
Respuestas:
Si
-R
bien posix está bien definido, ¡-r
no es portátil!En Linux, en las implementaciones de GNU y BusyBox
cp
,-r
y-R
son equivalentes.Por otro lado, como puede leer en la página del manual POSIX de
cp
, el-r
comportamiento está definido por la implementación .fuente
-r
copiará los archivos reales señalados por enlaces simbólicos, mientras-R
que copiará el enlace simbólico, que es lo que se pretende la mayoría de las veces.La diferencia es que uno usa una "R" minúscula y el otro usa una "R" mayúscula. Más allá de eso, no hay diferencia. Lo mismo si usa la
--recursive
opción larga.fuente
cp
hay realmente una distinción. Ver la respuesta de Random832 . @Ignacio, debe incluir un calificador en esta respuesta que diga "si sucp
es la implementación moderna de GNU" o algo así.-R
solo, y de hecho algunas de las páginas de manual en los sistemas que acabamos de mencionar también lo recomiendan.Minúscula
-r
era una opción anterior, introducida en 4.1BSD, que simplemente copiaría todos los no directorios como archivos. Es decir, si encuentra un dispositivo o FIFO, lo abrirá, leerá el contenido y creará un archivo en el destino con el contenido.Mayúscula
-R
era una opción estandarizada (introducida en BSD en 4.4BSD, aunque las versiones anteriores la tenían como sinónimo de-r
) que, al encontrar un dispositivo, FIFO u otro archivo especial, crearía un archivo especial equivalente en el destino.Muchas implementaciones aún mantienen esta distinción, pero algunas (incluida la versión GNU típica de Linux) solo proporcionan la
-R
semántica,-r
como sinónimo.fuente
En OS X y versiones anteriores de FreeBSD
-r
es como-R -L --copy-contents
en coreutils, o sigue enlaces simbólicos y lee el contenido de archivos especiales y FIFOs.mkdir a;touch b;ln -s $PWD/b a;cp -r a c
reemplaza el enlace simbólico con el archivo de destino en OS X,mkdir a;mkfifo a/b;cp -r a c
se bloquea al leer el FIFO ymkdir a;ln -s /dev/zero a;cp -r a b
comienza a rellenarseb/zero
con ceros.Desde la
cp
página del manual en OS X y versiones anteriores de FreeBSD:En las nuevas versiones de FreeBSD
-r
es equivalente a-RL
:http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :
fuente
Una de las diferencias es que encontré que -r no copia directorios ocultos mientras que -R copia directorios ocultos.
Lo probé .git directorio en el directorio de destino y llegué a la conclusión anterior. Estoy usando actualmente centOS.
Puedo estar equivocado pero está abierto a discusión.
fuente
-r
y-R
ambos copian directorios ocultos