Movido da pergunta para a resposta:
Como o h3rrmiller apontou, eu consegui isso com rsync
usando a opção --no-links
.
Eu tenho um projeto de software que usa uma estrutura de diretório específica para arquivos de configuração. Os links simbólicos são usados para apontar para os arquivos de configuração atualmente em uso. Estou no processo de criar um script de instalação personalizado para o CentOS 7.
Eu uso outro script para agrupar a estrutura de diretórios e o script do instalador. O script do pacote usa o rsync para copiar a estrutura de diretórios com todos os links simbólicos padrão intactos. Também exclui as pastas svn ocultas.
rsync -a --exclude=".*" [sourceFolder] [bundleFolder]
O script de instalação usa cp para instalar a estrutura de diretórios (links simbólicos padrão intactos) para o local especificado pelo usuário.
cp -rP [bundleFolder] [installLocation]
Isso tudo funciona muito bem.
No entanto, também preciso que o script do instalador consiga atualizar uma instalação existente. O problema com isso é que eu preciso poder atualizar os arquivos de configuração sem alterar os links simbólicos que o usuário possui.
Existe uma maneira de copiar toda a estrutura de diretórios (todas as pastas e subpastas), mas ignorar quaisquer links simbólicos? Eu estou tentando evitar ter que usar find para analisar toda a estrutura em um script bash apenas para ignorar os links simbólicos. Eu assumi que esta seria uma tarefa comum que cp ou rsync teria uma opção para. Eu não consegui encontrar um.
Tags bash shell shell-script