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