2013-05-07 3 views
1

Мне нужно уметь удалять произвольный список путей (как файлов, так и каталогов), и если какая-либо из этих неудачных попыток завершилась неудачей, мне нужно иметь возможность отката. Есть ли команда Unix, которая может вместить это? Если нет, скрипт bash также работает.Атомно удалить список путей

ответ

3

Там вряд ли будет команда, которая делает это в полной мере. O/S не поддерживает атомарное удаление нескольких путей, поэтому команде трудно сделать это. Рассмотрим SIGKILL; команда не может восстановиться, и ядро ​​не будет знать, что она должна отменить то, что было сделано, поэтому атомарность нарушена.

Вы можете аппроксимировать атомарность, перемещая удаленные файлы или каталоги в папку мусора, а затем удаляя только содержимое корзины мусора, когда все остальное преуспело (и восстанавливайте данные из папки мусора, если что-то пойдет не так). Но он не гарантирован атомным. И вам нужно беспокоиться о том, где разместить мусор, когда файлы находятся в разных файловых системах, поэтому вам нужна папка мусора для каждой файловой системы. Вам также нужно беспокоиться об атомарном удалении 30 файлов, которые все называются «makefile»; это означает, что вам понадобится информация о иерархии каталогов в каталоге мусора (возможно, фактические каталоги в каталоге корзины, поскольку все остальное, в конечном счете, неоднозначно).

Смежные вопросы