mv un file senza interrompere un collegamento simbolico a quel file


24

È possibile mvun file senza interrompere un collegamento simbolico a quel file? La mia risposta iniziale a questa domanda è negativa e sto elaborando una soluzione basata su script per modificare i collegamenti immediatamente dopo lo spostamento, ma mi chiedevo come gli altri hanno affrontato questo problema. I percorsi e i nomi dei collegamenti simbolici sono noti in anticipo, quindi in teoria tutto ciò che devo fare è:

  1. ottenere la destinazione del collegamento
  2. mv il bersaglio
  3. ricreare il collegamento al nuovo target
  4. creare un nuovo link al nuovo target (diverso dal link originale, che per ora voglio ancora conservare)

In un secondo momento:

  1. elimina il vecchio link

1-4 verrà incapsulato in uno script bash, ma mi chiedo se qualcuno abbia un approccio più elegante o sia a conoscenza di un comando integrato o di un comando di cui non sono a conoscenza.


2
I collegamenti reali non presentano questo problema. Hanno però altri inconvenienti. :-)
Stéphane Gimenez,

3
Sì, non è possibile utilizzare i collegamenti fisici poiché i file si trovano su più file system.
gabe.

2
Inoltre: impossibile collegarsi a una directory.
sampablokuper,

Risposte:


8

Sei sulla strada giusta, non penso che ci sia un modo più semplice della sequenza che descrivi.

I passaggi 3 e 4 sono un po 'confusi. Se si desidera targetizzare nuovamente i collegamenti esistenti mantenendo lo stesso nome, è possibile utilizzare ln -fper sovrascrivere i file esistenti. Se desideri che anche il nome dei tuoi collegamenti cambi in modo da riflettere il nuovo nome di destinazione, la sequenza è corretta.


1
Heh, sì, ho appena riletto quella parte e ora mi sono anche confuso. Lo modificherò in modo che abbia più senso. Grazie.
gabe.

Sono un po 'confuso sull'uso di ln -f, ma penso che lo script pubblicato da @fred possa aiutare a chiarire come funziona. La pagina man non è stata di grande aiuto, sorprendentemente.
gabe.

@gabe. La versione originale della mia risposta aveva il corretto -s -f, ma durante la modifica, "perse" il -s: sbagliato! Da wikipedia : 'ln' senza opzioni crea un collegamento reale, 'ln -f' forza un collegamento reale ... quindi grazie per la domanda, mi ha davvero confermato la sintassi per me ora. Di certo mi ha fatto ricontrollare cose ... Richiede ln -s -f... (Ho fatto l'adeguamento)
Peter.O

4

Per la tua situazione:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link

Nota: sarà più complicato se è coinvolta una catena di collegamenti.
Peter

0

Ho il prossimo problema. Ho trovato molto bene un tema di icone chiamato "Suru ++"

Suru ++ 20 [ufficialmente privo di bug e compatibile con 11 DE]

Ma questo tema icona è realizzato in svg tutto l'immagine. Ora voglio usarlo in Fluxbox e generare voci di menu ma questo è possibile solo con l'immagine dell'icona png Scarico il master al suo interno che sono tutte icone in formato svg, e sì posso convertire dalla riga di comando svg in png tutto ok generare per ognuna dimensioni della cartella come 16x16, 24x24 px. Ma in quelle cartelle ci sono collegamenti simbolici a un file svg:

estensioni svg all'interno di collegamenti simbolici che voglio cambiare in png

Se c'è un modo per cambiare l'estensione svg in png all'interno di tutti i collegamenti di symbolix, il tema dell'icona funzionerebbe bene nel menu Fluxbox e File Manager. Ho creato un entrie su questo tema di icone usando in Xubuntu ma in spagnolo

Che Dio vi benedica

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.