memaksa cp untuk menyalin pada symlink yang menjuntai

15

Apakah ada cara untuk memaksa cp(Bash 4.2.5, Ubuntu 12.04) untuk menyalin ke symlink yang menjuntai?

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

cp -f tampaknya impoten dalam kasus ini dan menghasilkan pesan yang sama.

Marcus Junius Brutus
sumber
Apakah Anda mencoba menggunakan cp -fsebagai gantinya?
Rohith Madhavan
@RohithMadhavan ya; pesan yang sama (saya baru saja memperbarui pertanyaan)
Marcus Junius Brutus

Jawaban:

21

Buat cphapus file target sebelum menyalin:

$ 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

Dari man cp:

--remove-destination
      remove  each existing destination file before attempting to open
      it (contrast with --force)
muru
sumber
2

Cukup gunakan di unlink theSymLinkmana theSymLinksymlink yang sebenarnya, lalu coba lagi

SwCharlie
sumber
3
Ini akan berhasil, tetapi perhatikan bahwa unlinkmemiliki efek yang sama dengan (dan karenanya tidak ada keuntungan dibandingkan dengan) yang lebih umum digunakan rm. Secara khusus, seperti rm foo, unlink fooakan menghapus file foobahkan ketika itu adalah file biasa dan bukan tautan simbolik. Menggunakan unlinkbukannya rm(atau mv --remove-destination ...) tidak melindungi terhadap kehilangan data yang tidak disengaja.
Eliah Kagan