Если количество файлов, которые должны быть удалены, значительно превосходит число оставленных файлов, возможно, не самый эффективный подход - пройтись по дереву удаляемых файлов и выполнить все эти обновления файловой системы. (Это аналогично выполнению неуклюжего управления памятью с подсчетом ссылок, посещению каждого объекта в большом дереве, чтобы отбросить ссылку, вместо того, чтобы за один шаг превратить все ненужное в мусор, а затем просмотр всего, что доступно для очистки.)
То есть клонировать части дерева, которые должны быть сохранены, в другой том. Пересоздайте новую чистую файловую систему на исходном томе. Скопируйте сохраненные файлы обратно в их исходные пути. Это примерно похоже на копирование сборки мусора .
Будет некоторое время простоя, но это может быть лучше, чем постоянная плохая производительность и нарушение работы.
Это может быть непрактично в вашей системе и ситуации, но легко представить очевидные случаи, когда это путь.
Например, предположим, что вы хотите удалить все файлы в файловой системе. Какой смысл повторять и удалять по одному? Просто размонтируйте его и выполните «mkfs» поверх раздела, чтобы создать пустую файловую систему.
Или предположим, что вы хотите удалить все файлы, кроме полдюжины важных? Получите полдюжины оттуда и ... "mkfs" поверх.
В конце концов, существует определенная точка безубыточности, когда остается достаточно файлов, и рекурсивное удаление становится дешевле, принимая во внимание другие затраты, такие как время простоя.