Zamień łącze symboliczne, które prowadzi do katalogu docelowego

17

Chcę zaktualizować serwer tomcat z wersji 7.0.19 do wersji 7.0.20.

Już ln -s apache-tomcat-7.0.19 tomcat7wcześniej, więc teraz muszę połączyć się tomcat7 z nowym celem za pomocą następującego polecenia ln -s --force apache-tomcat-7.0.21 tomcat7, ale to nie działa tak, jak się spodziewałem: utworzyło dowiązanie symboliczne tomcat7/apache-tomcat-7.0.21zamiast zastąpić istniejące tomcat7dowiązanie symboliczne nowym celem.

Przykład

# 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

Sprawdziłem instrukcjęln , myślę, że ln -s --force apache-tomcat-7.0.21 tomcat7używam 3. formularza zamiast 1. formularza do wyjaśnienia parametrów. To jest tak niejednoznaczne między pierwszą i trzecią formą. Jak w takim przypadku zastąpić link symboliczny?

LiuYan 刘 研
źródło

Odpowiedzi:

16

Chcesz -Topcję:

$ 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
źródło
Dzięki, właśnie tego potrzebowałem. Szkoda, widzę tę opcjonalną opcję w pomocy, ale nie wiem, co dokładnie robi.
LiuYan 研 研
16

Podczas zastępowania dowiązań symbolicznych do katalogów powinniśmy skorzystać z -nopcji.

Przykład: ln -sfn /path/to/directory /target/directory

Surya Prabhakar
źródło
1
To powinna być zaakceptowana odpowiedź. Rozwiązuje pytanie i jedno-liniowy / kompaktowy.
do
1
Przyjęta odpowiedź rozwiązuje również pytanie i jest jednokierunkowa ... chyba że się mylę, może być równie zwarta. Nie sądzę, że konieczne jest oddzielne -i odstępy przed każdą flagą, jaką mają.
ArtOfWarfare
3

Dlaczego nie tylko

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Nie dotknie to starego katalogu apache-tomcat-7.0.19, ale po prostu usunie stary link. Następnie mogę utworzyć nowy.

fschmitt
źródło
Dzięki! Zrobiłem to obecnie w moim skrypcie, ale myślę, że jest inaczej cp -f/ mv -fktóre używają jednego polecenia do wykonania operacji zastępowania, więc szukam rozwiązania dla pojedynczego polecenia .
LiuYan 刘 研