Начнем с утверждения, что mv
не всегда является атомарным.
Для любого отдельного файла перемещение или переименование, выполняемое mv
, является атомарным при условии, что файл перемещен в пределах одной и той же файловой системы. Атомарность не гарантирует, что файл находится только в том или ином месте; вполне возможно, что файл может присутствовать в файловой системе в обоих местах одновременно "некоторое время".
mv
определенно не является атомарной, когда выполняемое им перемещение из одной файловой системы в другую, или когда удаленная файловая система не может локально реализовать операцию mv
. В этих случаях mv
реализуется эквивалентом cp
, за которым следует rm
.
Теперь переходим к вопросу об атомарности через несколько файлов. mv
в лучшем случае атомарны только для каждого файла, так что если у вас есть несколько файлов, которые нужно переместить вместе, реализация такова, что они будут перемещаться по одному за раз.
Если вам действительно нужно, чтобы группа файлов появилась в месте назначения одновременно, подумайте о том, чтобы поместить их в каталог и переместить этот каталог. Этот единственный объект (каталог) можно перемещать атоматически
. номер mv dir1/*
тот же самый, что и mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Каждый отдельный ход является атомным, но не полным набором.
В другом случае после запуска mv в dir1 добавляется новый файл.
Так как "*" расширяется оболочкой, mv даже не узнает о новом файле.