23

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
  • 193,181
  • 53
  • 473
  • 722
Marcus Junius Brutus
  • 787
  • 4
  • 11
  • 29

2 Answers2

33

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
  • 193,181
  • 53
  • 473
  • 722
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`](http://manpages.ubuntu.com/manpages/utopic/en/man1/unlink.1.html) has the same effect as (and thus no advantage compared to) the more commonly used [`rm`](http://manpages.ubuntu.com/manpages/utopic/en/man1/rm.1.html). 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