змусити cp скопіювати висячі символи


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натомість?
Rohith Madhavan

@RohithMadhavan yep; те саме повідомлення (я щойно оновив питання)
Маркус Юніус Брут

Відповіді:


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є фактичне символьне посилання, а потім спробуйте ще раз


3
Це буде спрацьовувати, але зауважте, що він unlinkмає той же ефект, що і (а отже, не має переваги порівняно з) rm. Зокрема, як- небудь rm foo, unlink fooбуде видалено файл, fooнавіть коли це звичайний файл, а не символічне посилання. Використання unlinkзамість rm(або mv --remove-destination ...) не захищає від випадкових втрат даних.
Елія Каган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.