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.


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)

2

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.