Solution 1 :
Commençons par la déclaration que mv
n'est pas toujours atomique.
Identifions également que l'atomicité fait référence au contenu du fichier, pas au nom du fichier.
Pour tout fichier individuel, le déplacement ou renommage effectué par mv
est atomique à condition que le fichier soit déplacé dans le même système de fichiers. L'atomicité ne garantit pas que le fichier se trouve uniquement à un endroit ou à un autre; il est tout à fait possible que le fichier soit présent dans le système de fichiers aux deux endroits simultanément pendant "un court laps de temps". Ce que l'atomicité garantit, lorsqu'elle est proposée, c'est que le contenu du fichier est instantanément disponible complètement et non partiellement. Vous pouvez imaginer que mv
dans de telles situations aurait pu être implémenté avec ln
suivi de rm
.
mv
n'est certainement pas atomique lorsque le déplacement qu'il effectue est d'un système de fichiers à un autre, ou lorsqu'un système de fichiers distant ne peut pas implémenter le mv
fonctionnement localement. Dans ces cas mv
on pourrait dire qu'il est implémenté par l'équivalent d'un cp
suivi de rm
.
Passons maintenant à la question de l'atomicité sur plusieurs fichiers. mv
est au mieux atomique uniquement par fichier, donc si vous avez un certain nombre de fichiers à déplacer ensemble, l'implémentation est telle qu'ils seront déplacés un par un. Si vous aimez, mv file1 dir; mv file2 dir; mv file3 dir
.
Si vous avez vraiment besoin qu'un groupe de fichiers apparaisse simultanément dans une destination, envisagez de les placer dans un répertoire et de déplacer ce répertoire. Cet objet unique (le répertoire) peut être déplacé de manière atomique.
Solution 2 :
N° mv dir1/*
est identique à mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Chaque mouvement individuel est atomique, mais pas l'ensemble complet.