forçar o cp a copiar em links simbólicos pendentes

15

Existe alguma maneira de forçar cp(Bash 4.2.5, Ubuntu 12.04) a copiar para um link simbólico pendente?

cp a-file path/to/danling/symlink/a-file
cp: not writing through dangling symlink `path/to/danling/symlink/a-file`

cp -f parece ser impotente nesse caso e resulta na mesma mensagem.

Marcus Junius Brutus
fonte
Você tentou usar cp -f?
Rohith Madhavan
@RohithMadhavan yep; mesma mensagem (Eu só atualizou a questão)
Marcus Junius Brutus

Respostas:

21

Faça cpremover o arquivo de destino antes de copiar:

$ ln -s /random/file f              
$ cp -f a f                  
cp: not writing through dangling symlink ‘f’
$ cp --remove-destination a f
$ diff a f && echo yes
yes

De man cp:

--remove-destination
      remove  each existing destination file before attempting to open
      it (contrast with --force)
muru
fonte
2

Basta usar unlink theSymLinkonde theSymLinkestá o link simbólico real e tentar novamente

SwCharlie
fonte
3
Isso funcionará, mas observe que unlinktem o mesmo efeito que (e, portanto, nenhuma vantagem em comparação com) a mais usada rm. Em particular, como rm foo, unlink fooexcluirá um arquivo foomesmo quando for um arquivo regular e não um link simbólico. Usar em unlinkvez de rm(ou mv --remove-destination ...) não protege contra a perda acidental de dados.
Elias Kagan