заставить копировать на висячие символические ссылки

15

Есть ли способ заставить cp(Bash 4.2.5, Ubuntu 12.04) скопировать на висячую символическую ссылку?

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

cp -f кажется бессильным в этом случае и приводит к тому же сообщению.

Маркус Юний Брут
источник
Вы пытались использовать cp -fвместо этого?
Рохит Мадхаван
@RohithMadhavan yep; то же сообщение (я только что обновил вопрос)
Marcus Junius Brutus

Ответы:

21

Сделайте cpудаление целевого файла перед копированием:

$ 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

От man cp:

--remove-destination
      remove  each existing destination file before attempting to open
      it (contrast with --force)
Мур
источник
2

Просто используйте unlink theSymLinkгде theSymLinkфактическая символическая ссылка, затем попробуйте снова

SwCharlie
источник
3
Это будет работать, но учтите, что это unlinkимеет тот же эффект, что и (и, следовательно, не имеет преимуществ по сравнению с) более широко используемым rm. В частности, вроде rm foo, unlink fooудалит файл, fooдаже если это обычный файл, а не символическая ссылка. Использование unlinkвместо rm(или mv --remove-destination ...) не защищает от случайной потери данных.
Элия ​​Каган,