My understanding is that mv dir1/file1 dir2/ is atomic,
Is mv dir1/* dir2/ also atomic?
As an example, assume there are 10 files in dir1 that are 10GB each.
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.Sign up to join this community
Let's start with the statement that
mv is not always atomic.
Let's also identify that atomicity refers to file contents, not to the file name.
For any individual file, the move or rename performed by
mv is atomic provided that the file is moved within the same filesystem. The atomicity does not guarantee that the file is only in one place or another; it is quite possible that the file could be present in the filesystem in both places simultaneously for "a short time". What atomicity does guarantee, when offered, is that the file contents are instantaneously available completely and not partially. You can imagine that
mv in such situations could have been implemented with
ln followed by
mv is most definitely not atomic when the move that it performs is from one filesystem to another, or when a remote filesystem cannot implement the
mv operation locally. In these instances
mv could be said to be implemented by the equivalent of a
cp followed by
Now, moving on to the question of atomicity across multiple files.
mv is at best atomic only per file, so if you have a number of files to move together, the implementation is such that they will be moved one at a time. If you like,
mv file1 dir; mv file2 dir; mv file3 dir.
If you really need a group of files to appear in a destination simultaneously, consider putting them in a directory and moving that directory. This single object (the directory) can be moved atomically.