Crea collegamento simbolico: sovrascrivi se ne esiste uno


54

Voglio rimuovere i dati /path/to/data/folder/month/date/hour/minute/filee collegarli a symlink /path/to/recent/filee farlo automaticamente ogni volta che viene creato un file.

Supponendo che non saprò in anticipo se /path/to/recent/fileesiste, come posso fare per crearlo (se non esiste) o sostituirlo (se esiste)? Sono sicuro di poter semplicemente verificare se esiste e quindi fare un eliminazione, collegamento simbolico, ma mi chiedo se esiste un semplice comando che farà quello che voglio in un solo passaggio.


Se la destinazione esiste, ma non è un collegamento simbolico, cosa vuoi / ti aspetti che accada?
Toby Speight,

Risposte:


34

Si prega di leggere il manuale .

ln -sfn /new/target /path/to/symlink

$ man ln

-n, --no-dereference
tratta LINK_NAME come un normale file se si tratta di un collegamento simbolico a una directory


1
Perché questa è la risposta corretta?
Mrchief,

1
@Mrchief Se /path/to/symlinkè già un collegamento simbolico a una directory, senza il -nflag, otterrai il collegamento simbolico creato /path/to/symlink/targetinvece di sostituirlo/path/to/symlink
Flimm

Nota che in macOS, questo non funziona ancora in alcuni casi, ad esempio quando /path/to/symlinkesiste ed è una directory e non un collegamento simbolico. Penso che l'unico modo per aggirare il problema sia quello di correre per rm -rfprimo.
Flimm,

78

Questo è lo scopo della ln's -f' opzione: rimuove i file di destinazione preesistenti, se del caso, prima di creare il collegamento.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

creerà il link simbolico /path/to/recent/fileche punta a /path/to/data/folder/month/date/hour/minute/file, sostituendo qualsiasi file o link simbolico esistente in un file, se necessario (e fine funzionare se nulla esiste già lì).

Se una directory, o collegamento simbolico a una directory, esiste già con il nome di destinazione, il collegamento simbolico verrà creato al suo interno (quindi si finirà con /path/to/recent/file/filel'esempio sopra). L' -nopzione, disponibile in alcune versioni di ln, si occuperà dei collegamenti simbolici alle directory per te, sostituendoli se necessario:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln non specifica -nquindi non puoi fare affidamento su di esso in generale. Gran parte del lncomportamento è definito dall'implementazione, quindi è necessario verificare le specifiche del sistema in uso. Se stai usando GNUln , puoi usare anche le opzioni -te -T, per renderlo completamente prevedibile in presenza di directory ( es. Fallire invece di creare il collegamento all'interno della directory esistente con lo stesso nome).

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.