Domanda

Ho due voci di directory, A e B. Prima, A e B per diversi inode. In seguito, voglio B al punto allo stesso inode come fa. Voglio che questo per essere sicuri - e con questo intendo se fallisco qualche parte, b sia punti al suo inode originale o un inode. soprattutto non voglio finire con b scomparsa.

mv è atomica quando sovrascrivere.

appare ln non funzionare quando la destinazione è già esistente.

così sembra che posso dire:

ln un tmp mv tmp b

, che in caso di guasto lascerà un file 'tmp' in giro, che è indesiderabile, ma non un disastro.

C'è un modo migliore per fare questo?

(quello che sto effettivamente cercando di fare è sostituire i file che hanno un contenuto identico con un unico inode contenente tale contenuto, condivisa tra tutte le voci di directory)

È stato utile?

Soluzione

 ln a tmp ; mv tmp b

è in realtà il modo più veloce per farlo atomicamente, come lei ha affermato nella sua interrogazione.

(Nitpickers angolo: più veloce di inserire entrambe le chiamate di sistema in un unico programma)

Altri suggerimenti

ln a tmp && mv tmp b || rm tmp

sembra migliore, come allora se ln non riesce, non verrà eseguito il mv (e ingombrare stderr quando fallisce).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top