Является ли М. В. с символом подстановки еще атомным

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

Другие вопросы по тегам