24

Is there any way to force cp (Bash 4.2.5, Ubuntu 12.04) to copy onto a dangling symlink?

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

cp -f seems to be impotent in this case and results in the same message.

muru
  • 197,895
  • 55
  • 485
  • 740

2 Answers2

34

Make cp remove the target file before copying:

$ 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

From man cp:

--remove-destination
      remove  each existing destination file before attempting to open
      it (contrast with --force)
muru
  • 197,895
  • 55
  • 485
  • 740
4

Just use unlink theSymLink where theSymLink is the actual symlink, then try again

SwCharlie
  • 51
  • 2
  • 7
    This will work, but note that unlink has the same effect as (and thus no advantage compared to) the more commonly used rm. In particular, like rm foo, unlink foo will delete a file foo even when it is a regular file and not a symbolic link. Using unlink instead of rm (or mv --remove-destination ...) does not guard against accidental data loss. – Eliah Kagan Apr 27 '15 at 20:02