Tengo dos directorios en el mismo directorio principal. Llame al directorio principal base y los directorios hijos alpha y bravo. Quiero reemplazar alpha con bravo. El método más simple es:Mover un directorio atómicamente
rm -rf alpha
mv bravo alpha
El comando mv es atómico, pero el rm -rf no lo es. ¿Hay una manera simple en bash de reemplazar atómicamente alpha con bravo? Si no, ¿hay una forma complicada?
Adición:
Por cierto, no es un problema insuperable si el directorio no existe para un período corto. Solo hay un lugar que intenta acceder a alpha, y comprueba si alpha existe antes de hacer algo crítico. Si no, da un mensaje de error. Pero sería bueno si hubiera una manera de hacer esto. :) Tal vez hay alguna manera de modificar los inodes directamente, o algo ...
Su prueba en la adición no es seguro - no es una condición de carrera. Considere lo que sucede si la comprobación se ejecuta primero (y existe Alpha) y luego se desactiva mientras que el segundo proceso elimina Alpha, y luego se vuelve a encender para continuar la ejecución, con Alpha ahora faltante. – Oddthinking