
¿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=links
interruptor a su cp
comando.
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:
cp
Es posible que no tenga opciones estandarizadas para hacer esto que sean comunes a Linux y BSD, pero pax
las tiene.
( cd fuente && pax -pp -r -w * destino/ )