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