mv с подстановочным знаком, все еще атомарным

Мое понимание - то, что mv dir1/file1 dir2/является атомарным,

mv dir1 /* dir2/также атомарный?

Как пример, предположите, что существует 10 файлов в dir1, которые составляют 10 ГБ каждый.

6
задан 17 March 2015 в 21:22
3 ответа

Начнем с утверждения, что mv не всегда является атомарным.

Для любого отдельного файла перемещение или переименование, выполняемое mv, является атомарным при условии, что файл перемещен в пределах одной и той же файловой системы. Атомарность не гарантирует, что файл находится только в том или ином месте; вполне возможно, что файл может присутствовать в файловой системе в обоих местах одновременно "некоторое время".

mv определенно не является атомарной, когда выполняемое им перемещение из одной файловой системы в другую, или когда удаленная файловая система не может локально реализовать операцию mv. В этих случаях mv реализуется эквивалентом cp, за которым следует rm.

Теперь переходим к вопросу об атомарности через несколько файлов. mv в лучшем случае атомарны только для каждого файла, так что если у вас есть несколько файлов, которые нужно переместить вместе, реализация такова, что они будут перемещаться по одному за раз.

Если вам действительно нужно, чтобы группа файлов появилась в месте назначения одновременно, подумайте о том, чтобы поместить их в каталог и переместить этот каталог. Этот единственный объект (каталог) можно перемещать атоматически

.
20
ответ дан 2 December 2019 в 23:56

номер mv dir1/* тот же самый, что и mv dir1/file1 && mv dir1/file2 && mv dir1/fileN. Каждый отдельный ход является атомным, но не полным набором.

.
7
ответ дан 2 December 2019 в 23:56

В другом случае после запуска mv в dir1 добавляется новый файл.

Так как "*" расширяется оболочкой, mv даже не узнает о новом файле.

1
ответ дан 2 December 2019 в 23:56

Теги

Похожие вопросы