Copiar carpeta con enlaces simbólicos

Copiar carpeta con enlaces simbólicos

¿Cómo puedo copiar una carpeta que contiene enlaces simbólicos y conservarlos en la carpeta de destino? Estoy haciendo algo como esto con PHP/Bash:

system("cp -r production-clone-target production-sites/{$instanceName}");

pero los enlaces simbólicos no aparecen en la carpeta de destino.

Respuesta1

Intente agregar el --preserve=linksinterruptor a su cpcomando.

De man cp:

    --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps), 
if possible additional attributes: context, links,xattr, all

Editar: si está en OS X; usar cp -a.

Respuesta2

También puedes usar rsync:

-l, --links                 copy symlinks as symlinks

Me gusta -a, que también incluye este, para copiar también subdirectorios, etc.

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

Entonces, en tu ejemplo de código podrías hacer esto:

system("rsync -a production-clone-target production-sites/{$instanceName}");

Respuesta3

Dejando de lado las preocupaciones válidas sobre el uso system()en su programa PHP:

cpEs posible que no tenga opciones estandarizadas para hacer esto que sean comunes a Linux y BSD, pero paxlas tiene.

( cd fuente && pax -pp -r -w * destino/ )

información relacionada