zmuś cp do kopiowania na wiszących dowiązaniach symbolicznych

15

Czy jest jakiś sposób, aby zmusić cp(Bash 4.2.5, Ubuntu 12.04) do skopiowania na wiszące dowiązanie symboliczne?

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

cp -f wydaje się w tym przypadku bezsilny i skutkuje tym samym komunikatem.

Marcus Junius Brutus
źródło
Próbowałeś cp -fzamiast tego użyć ?
Rohith Madhavan
@RohithMadhavan yep; ta sama wiadomość (właśnie zaktualizowałem pytanie)
Marcus Junius Brutus

Odpowiedzi:

21

Dokonaj cpusunąć plik docelowy przed kopiowaniem:

$ 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

Od man cp:

--remove-destination
      remove  each existing destination file before attempting to open
      it (contrast with --force)
muru
źródło
2

Po prostu użyj unlink theSymLinkgdzie theSymLinkjest rzeczywiste dowiązanie symboliczne, a następnie spróbuj ponownie

SwCharlie
źródło
3
To zadziała, ale należy pamiętać, że unlinkma taki sam efekt jak (a zatem nie ma przewagi w porównaniu do) częściej używanych rm. W szczególności, jak rm foo, unlink foousunie plik, foonawet jeśli jest to zwykły plik, a nie symboliczny link. Używanie unlinkzamiast rm(lub mv --remove-destination ...) nie chroni przed przypadkową utratą danych.
Eliah Kagan