Come sovrascrivere un collegamento simbolico di una directory?


15

Ci sono due directory foo1e foo2.

All'inizio creo un link simbolico di directory di ln -s foo1 bar. Dopodiché voglio cambiare il link simbolico, quindi ho digitatoln -sf foo2 bar

Ma barè ancora collegato foo1. Symlink foo2viene creato all'interno di foo1.

Cosa devo digitare quando voglio sostituirlo foo1con foo2?

Ho testato in tre ambienti.

  1. Ubuntu 12.04, ln (GNU coreutils) 8.13
  2. CentOS 6.4, ln (GNU coreutils) 8.4
  3. OS X 10.7.5, ln (senza versione)

Risposte:


18

Il modo corretto per farlo è utilizzare l' -n, --no-dereferenceopzione in questo modo.

$ ln -snf foo2 bar

Ciò causa il lntrattamento del collegamento simbolico esistente come un file. In caso contrario, dereferenzia bara foo1, scende nel foo1e utilizza l'originale TARGETnome come LINK_NAMEed è per questo si finisce con un link simbolico per foo2essere creata all'interno della foo1directory. La manpage on lnafferma quanto segue ...

-n, --no-dereference
       tratta LINK_NAME come un normale file se si tratta di un link simbolico a
       elenco

Di seguito è riportato l'output della shell sul mio desktop Arch Linux con la versione 8.21 di lncon e senza l' --no-dereferenceopzione, ho ottenuto gli stessi risultati che hai fatto senza l' --no-dereferenceopzione, ma usando l' --no-dereferenceopzione ha funzionato come previsto.

$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
  total 0
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2

Grazie per la tua risposta. Se è un problema dipendente dall'ambiente, scriverò il mio ambiente. Quale sistema operativo stai usando? quali uscite ln --version?
Feronsand,

Ho provato questo su una Fedora 18 VM con la versione 8.17. È interessante notare che ho provato questo sul mio desktop Arch Linux con la versione 8.21 e ho ottenuto gli stessi risultati che hai fatto. Sembra che da qualche parte tra queste due versioni qualcosa sia cambiato. La soluzione che ho pubblicato ha funzionato in entrambi i casi.
Ha disegnato Chapin il

Cordiali saluti, ho trovato questa risposta sui forum di justlinux.com .
Ha disegnato Chapin il

Grazie druciferre! Non ho nemmeno mai pensato che il lncomando aggiornasse così spesso.
Feronsand

Ho provato anche in osx. lnfunziona come Ubuntu e Centos con la directory sovrascrive e ln -snfrisolve il problema. Anche se ln -hè preferibile l'opzione da usare in osx.
Iron and
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.