Copiar pasta com links simbólicos

Copiar pasta com links simbólicos

Como posso copiar uma pasta que contém links simbólicos e reter os links simbólicos na pasta de destino? Estou fazendo algo assim com PHP/Bash:

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

mas os links simbólicos não aparecem na pasta de destino.

Responder1

Tente adicionar a --preserve=linksopção ao seu cpcomando.

De man cp:

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

Editar: se estiver no OS X; usar cp -a.

Responder2

Você também pode usar o rsync:

-l, --links                 copy symlinks as symlinks

Eu gosto -a, que também inclui este, de copiar também subdiretórios, etc.

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

Então, no seu exemplo de código você poderia fazer isso:

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

Responder3

Deixando de lado as preocupações válidas sobre o uso system()em seu programa PHP:

cppode não ter opções padronizadas para fazer isso que são comuns ao Linux e aos BSDs, mas paxtem.

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

informação relacionada