Ganti tautan simbolik yang tertaut ke target direktori

17

Saya ingin memperbarui server kucing jantan dari 7.0.19 ke 7.0.20.

Saya sudah pernah melakukannya ln -s apache-tomcat-7.0.19 tomcat7, jadi sekarang saya harus menautkan tomcat7 ke target baru menggunakan perintah berikut ln -s --force apache-tomcat-7.0.21 tomcat7, tetapi tidak berfungsi seperti yang saya harapkan: itu membuat tautan simbolik tomcat7/apache-tomcat-7.0.21alih-alih mengganti tomcat7tautan simbolik yang ada dengan target baru.

Contoh

# mkdir v1 v2
# ln -s v1 v
# ln -s v2 v
# ll v*
lrwxrwxrwx. 1 root root    2 Sep  5 16:02 v -> v1

v1:
total 0
lrwxrwxrwx. 1 root root 2 Sep  5 16:02 v2 -> v2

v2:
total 0

Saya memeriksa manualln , saya pikir ln -s --force apache-tomcat-7.0.21 tomcat7gunakan formulir ke-3 daripada formulir ke-1 untuk menjelaskan parameter. Itu sangat ambigu antara formulir 1 dan 3. Jadi bagaimana cara mengganti tautan simbolis dalam kasus ini?

LiuYan 刘 研
sumber

Jawaban:

16

Anda menginginkan -Topsi:

$ mkdir v1
$ ln -s v1 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:58 foo -> v1/
$ mkdir v2
$ ln -s -T -f v2 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:59 foo -> v2/
phs
sumber
Terima kasih, itulah yang saya butuhkan. Sayang sekali, saya melihat opsi opsional ini membantu, tetapi saya tidak tahu apa sebenarnya yang dilakukannya.
LiuYan 刘 研
16

Saat mengganti tautan simbolik ke direktori, kita harus menggunakan -nopsi.

Contoh: ln -sfn /path/to/directory /target/directory

Surya Prabhakar
sumber
1
Ini harus menjadi jawaban yang diterima. Memecahkan pertanyaan dan one-liner / compact.
sampai
1
Jawaban yang diterima juga memecahkan pertanyaan dan hanya satu kalimat ... kecuali saya salah, itu bisa sama kompaknya. Saya tidak berpikir itu perlu untuk memiliki -ruang dan terpisah sebelum setiap bendera seperti yang mereka miliki.
ArtOfWarfare
3

Kenapa tidak adil?

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Ini tidak akan menyentuh direktori lama apache-tomcat-7.0.19 tetapi cukup hapus tautan yang lama. Kemudian ln dapat membuat yang baru.

fschmitt
sumber
Terima kasih! Saya melakukan ini saat ini dalam skrip saya, tetapi saya pikir ini tidak seperti cp -f/ mv -fyang menggunakan perintah tunggal untuk melakukan operasi menimpa, jadi saya mencari solusi perintah tunggal .
LiuYan 刘 研