Diferencia entre cp -r y cp -a

174

Estoy buscando la diferencia entre cp -ry cp -a. ¿Qué significa "recursivo" en términos de copiar archivos de una carpeta?

Cachondo
fuente
62
Algunas personas buscan una mejor explicación para las páginas de manual porque no siempre está claro qué significa la descripción. He tenido que cavar muchas veces y probar / experimentar para descubrir qué está pasando realmente con un comando en particular. La página de manual de grep puede confundirme cualquier día.
Joe
2
Puedo entender tu frustración, pero la mayoría de las veces, la mejor manera de aprender es probar y experimentar.
tripledes
37
O aprenda haciendo preguntas aquí, obteniendo la respuesta de una manera que usted entienda, y luego tenga un mejor sentido de comprender qué y cómo probar y experimentar. Tenga en cuenta que a menudo funciona para usted, no funciona para mí, etc., etc.
Will Lanni

Respuestas:

198

Recursivo significa que cpcopia el contenido de los directorios, y si un directorio tiene subdirectorios, también se copian (recursivamente). Sin -R, el cpcomando omite directorios. -res idéntico al -Rde Linux, difiere en algunos casos extremos en algunas otras variantes de Unix.

Por defecto, cpcrea un nuevo archivo que tiene el mismo contenido que el archivo anterior y los mismos permisos pero restringido por la umask ; la copia está fechada desde el momento de la copia y pertenece al usuario que hace la copia. Con la -popción, la copia tiene el mismo tiempo de modificación, el mismo tiempo de acceso y los mismos permisos que el original. También tiene el mismo propietario y grupo que el original, si el usuario que realiza la copia tiene el permiso para crear dichos archivos.

La -aopción significa -Ry -p, además de algunas otras opciones de preservación. Intenta hacer una copia lo más cercana posible al original: el mismo árbol de directorios, los mismos tipos de archivos, los mismos contenidos, los mismos metadatos (tiempos, permisos, atributos extendidos, etc.).

Gilles
fuente
35
Básicamente, a menos que desee algo especial, nunca lo necesita -rporque -a(para archive) siempre es lo más seguro y probablemente lo que esperaba que sucediera.
enms.
2
@ams Sí, ese es un buen resumen. La única razón común para usar -res porque estás en una variante de Unix que no es Linux -ay que generalmente usarías cp -rp. O rsync -a.
Gilles
a veces los permisos permitirán -r pero no -a
DrCord
No -r, no -R no funciona en Ubuntu 18
Arkady
16

La opción -r o -R para "recursivo" significa que copiará todos los archivos, incluidos los archivos dentro de las subcarpetas.

La opción -a que figura en la lista es la misma que -dR, lo que significa que preservará los enlaces y copiará el contenido de los subdirectorios. Lo que significa preservar enlaces es que no seguirá los enlaces ya que se está copiando recursivamente.

Joe
fuente