¿Cómo copiar el contenido de una carpeta sin afectar los permisos de la carpeta de destino?

¿Cómo copiar el contenido de una carpeta sin afectar los permisos de la carpeta de destino?

Quiero copiar todos los archivos y carpetas de un directorio a otrosincambiando los permisos del directorio de destino.

Donde la carpeta de origen es 555 y la carpeta de destino es 775. Si uso el comando a continuación, el destino se cambia a 555. No quiero esto.

cp -r /origin/. /destination

¿Cuál es la sintaxis correcta para copiar el contenido de/origin? Para que /destino permanezca 775

No tengo sudo.

Respuesta1

usar rsync:

rsync -rlD /origin/ /destination/

Lo importante está al /final de origin/, que le dice a rsync que copie el contenido del directorio, no el directorio en sí. De esta manera, el directorio de nivel superior no se copia ni /destinationse modifica, excepto por los archivos que se le agregan.

Interruptores explicados:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

-r, --recursive             recurse into directories
-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-g, --group                 preserve group
-o, --owner                 preserve owner (super-user only)
-D                          same as --devices --specials

--devices               preserve device files (super-user only)
--specials              preserve special files

Respuesta2

En lugar de copiar el directorio en sí, copie los archivos que contiene.

cp -r /origin/* /destination

Si hay archivos punto (archivos cuyo nombre comienza con el carácter .), no se copiarán porque *los omite. Úselo cp -r /origin/.[!.]* /destinationpara copiar los archivos punto y cp -r /origin/..?* /destinationsi hay archivos cuyo nombre comienza con ..(aparte de ..él mismo, que designa el directorio principal).

información relacionada