Является ли М. В. с символом подстановки еще атомным
Я понимаю, что 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 даже не узнает о новом файле.