บังคับให้ cp ทำการคัดลอกบน symlinks ที่ห้อยอยู่


15

มีวิธีใดที่จะบังคับcp(Bash 4.2.5, Ubuntu 12.04) เพื่อคัดลอกไปยัง symlink ที่ห้อยอยู่หรือไม่?

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; ข้อความเดียวกัน (ฉันเพิ่งอัปเดตคำถาม)
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เป็น symlink จริงจากนั้นลองอีกครั้ง


3
สิ่งนี้จะใช้งานได้ แต่โปรดทราบว่าunlinkมีผลเช่นเดียวกับ (และไม่มีข้อได้เปรียบเมื่อเทียบกับ) ที่ใช้บ่อยrmกว่า โดยเฉพาะอย่างยิ่งเช่นrm foo, unlink fooจะลบไฟล์fooแม้เมื่อมันเป็นไฟล์ปกติและไม่ได้เชื่อมโยงสัญลักษณ์ การใช้unlinkแทนrm(หรือmv --remove-destination ...) ไม่ป้องกันการสูญหายของข้อมูลโดยไม่ตั้งใจ
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.