Estoy intentando (lo más cerca posible) cambiar atómicamente un enlace simbólico. He intentado:
ln -sf other_dir existing_symlink
Eso solo puso el nuevo enlace simbólico en el directorio al que apuntaba el enlace simbólico existente.
ln -sf other_dir new_symlink
mv -f new_symlink existing_symlink
Eso hizo lo mismo: movió el enlace simbólico al directorio.
cp -s other_dir existing_symlink
Se niega porque es un directorio.
He leído que mv -Tse hizo para esto, pero busybox no tiene la -Tbandera.

ln -snf), pero todavía hay dos llamadas al sistema bajo el capó.De hecho, esto se puede hacer atómicamente
rename(2), primero creando el nuevo enlace simbólico con un nombre temporal y luego sobrescribiendo limpiamente el enlace simbólico anterior de una vez. Como dice la página del manual :En el shell, haría esto de la
mv -Tsiguiente manera:Puede
straceusar ese último comando para asegurarse de que realmente se está utilizandorename(2)debajo del capó:Tenga en cuenta que en lo anterior, ambos
mv -Tystraceson específicos de Linux.En FreeBSD, use
mv -halternativamente.fuente
renamellamada al sistema directamente en lugar demv -homv -T. Por ejemplo con Perl:perl -e 'rename "z.new", "z" or die $!'Retomando donde dejó Arto aquí, esto es completamente posible, incluso sin
mv -Teso, solo necesita crear un nuevo enlace simbólico con el mismo nombre que el directorio de destino ymven el directorio principal de su objetivo:Ejemplo de código tomado a través de ( http://axialcorps.wordpress.com/2013/07/03/atomically-replacing-files-and-directories/ )
fuente
¿Lo has intentado
ln -snf?La opción
-nsobrescribe el destino en lugar de escribir debajo de él cuando el destino es un enlace simbólico a un directorio.Salud
fuente
ln -snfno es atómico: desvincula el destino y luego crea el enlace simbólico deseado.