Solución 1:
Comencemos con la afirmación de que mv
no siempre es atómico.
Identifiquemos también que la atomicidad se refiere al contenido del archivo, no al nombre del archivo.
Para cualquier archivo individual, el movimiento o cambio de nombre realizado por mv
es atómico siempre que el archivo se mueva dentro del mismo sistema de archivos. La atomicidad no garantiza que el archivo esté solo en un lugar u otro; es muy posible que el archivo esté presente en el sistema de archivos en ambos lugares simultáneamente durante "un corto tiempo". Lo que sí garantiza la atomicidad, cuando se ofrece, es que el contenido del archivo está disponible instantáneamente de forma completa y no parcial. Puedes imaginar que mv
en tales situaciones podría haberse implementado con ln
seguido de rm
.
mv
definitivamente no es atómico cuando el movimiento que realiza es de un sistema de archivos a otro, o cuando un sistema de archivos remoto no puede implementar el mv
operación localmente. En estos casos mv
podría decirse que está implementado por el equivalente de un cp
seguido de rm
.
Ahora, pasemos a la cuestión de la atomicidad en varios archivos. mv
es, en el mejor de los casos, atómico solo por archivo, por lo que si tiene varios archivos para mover juntos, la implementación es tal que se moverán uno a la vez. Si quieres, mv file1 dir; mv file2 dir; mv file3 dir
.
Si realmente necesita que un grupo de archivos aparezca en un destino simultáneamente, considere colocarlos en un directorio y mover ese directorio. Este único objeto (el directorio) se puede mover atómicamente.
Solución 2:
Nº mv dir1/*
es lo mismo que mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Cada movimiento individual es atómico, pero no el conjunto completo.