Come modificare un collegamento simbolico in OS X?


20

Come faccio a cambiare dove punta un link simbolico, senza eliminarlo e crearne uno nuovo (con ln -s "/path/to/point/to" "/path/where/symlink/is")?

Quando ho provato a farlo con il collegamento simbolico "Attuale" di Java, Java non funzionava nemmeno (dalla riga di comando, almeno, diceva "Errore di segmentazione") ma era tornato alla normalità quando ho ripristinato il vecchio collegamento simbolico "Attuale" con Time Macchina (ma in seguito ho scoperto che dovrei usare /Applications/Utilities/Java Preferences.appcomunque per cambiare l'attuale versione di Java).

Risposte:


8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

Tuttavia, l'utilità Preferenze Java cambia più di un semplice collegamento simbolico; dovresti usarlo per assicurarti che la versione di Java sia cambiata.


il comando mv non lo avrebbe semplicemente rinominato ..?
Mc

.. Ci ho provato, semplicemente sposta il nuovo symlink nella cartella a cui punta quello vecchio.
Mc

Il primo comando crea il collegamento simbolico che punta dove vuoi, e il secondo comando sostituisce il puntatore esistente al vecchio posto con il puntatore al nuovo posto. Il mv è atomico quindi il collegamento simbolico esisterà sempre.
mark4o

.. Ma ancora non funziona .. sposta il nuovo puntatore nella cartella a cui punta quello vecchio.
mk12

/path/where/symlink/isè il collegamento simbolico che stai modificando. L'uso di questi comandi lo cambierà in modo che punti /path/to/point/to. La cartella a cui punta il collegamento simbolico originale non viene toccata affatto.
mark4o

29
ln -hfs newlocation existinglink

o

ln -nfs newlocation existinglink

cambierà il collegamento esistente per puntare a nuova posizione

(il -n e -h sono identici in funzione)

Da 'man ln'

-h Se target_file o target_dir è un collegamento simbolico, non seguirlo. Questo è molto utile con l'opzione -f, per sostituire un symlink che può puntare a una directory.

-f Se il file di destinazione esiste già, scollegarlo in modo che possa verificarsi il collegamento. (L'opzione -f sovrascrive qualsiasi opzione -i precedente.)

-s Crea un collegamento simbolico


La -nfsversione funziona anche su Linux, quindi è più portatile se a qualcuno interessa.
Cromax,

10

Provare:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link

1
Sul mio MacBook Pro di fine 2013 con Mavericks, ho dovuto cambiare i due parametri: ln -s / path / to / symbolic / link / path / to / target
Marius Waldal,

1

Il comando ln non consente di modificare i collegamenti, ma solo di crearne di nuovi.


0

Hai confrontato le autorizzazioni sui collegamenti e sugli obiettivi prima e dopo aver modificato il collegamento? Potrebbe essere necessario seguire con i comandi chown e chmod appropriati per farlo funzionare.


Beh, non so nemmeno come cambiarlo, quindi no. E non so cosa facciano chmod e chown.
Mc

2
chown cambia la proprietà di un file e / o directory. chmod modifica le autorizzazioni di un file e / o directory. Questi sono standard in quasi tutte le piattaforme unix. Troppi dettagli per spiegarli qui, quindi consiglierei di cercare su Google ciascuno per i tutorial. Puoi anche fare "man chown" o "man chmod" per leggere il manuale effettivo del comando (premi q per uscire dal manuale).
churnd,
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.