Назад | Перейти на главную страницу

Как быстро удалить сотни тысяч файлов?

Возможный дубликат:
Выполнение rm -rf в массивном дереве каталогов занимает часы

Я запускаю программу моделирования на вычислительном кластере (Scientific Linux), которая генерирует сотни тысяч файлов атомных координат. Но у меня проблема с удалением файлов, потому что rm -rf никогда не завершается и тоже

find . -name * | xargs r

Нет ли способа просто отсоединить этот каталог от дерева каталогов? Единица хранения используется сотнями других людей, поэтому переформатирование невозможно.

Спасибо

Способ 1 Предполагая, что этот файл предназначен для создания, его нужно просто удалить после использования.

Если возможно, имейте все эти файлы, и только эти файлы, создать в автономном разделе или на диске. Когда пришло время их удалить, размонтируйте раздел и отформатируйте его. EXT4 (не EXT2) формат занимает всего несколько секунд.

Убедитесь, что вы не сохраняете информацию / отчет и т. Д. В том же месте.

Вы можете смонтировать новый раздел или новый диск в исходное расположение либо напрямую, либо с помощью -o привязать вариант.

Способ 2

Подумав немного нестандартно, вместо отдельного файла поместите все эти данные в таблицу базы данных. Затем бросьте всю таблицу после использования.

Я предполагаю, что вы столкнулись со странным типом файла, который не позволяет rm завершить работу. Попробуйте что-нибудь вроде

find . -type d -o -type f -print0 | xargs -0 rm -rf --

Просто отменить связь с каталогом было бы вполне возможно, если бы вы не возражали, чтобы не вернуть свободное пространство, а все файлы снова появятся в /lost+found в следующий fsck.

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

Если бы это была моя проблема, я бы создал специальный раздел для хранения этих файлов, и, кроме того, я бы, вероятно, использовал tmpfs, который в любом случае лучше предназначен для хранения временных файлов и сократит время повторного создания файловой системы.

Обычно я использую что-то вроде:

find ./directoryname -type f -name '*file-pattern*' -exec rm {} +

Также можно использовать -delete флаг к find команда.

find ./directoryname -type f -name '*file-pattern*' -delete

Является ли создание этих файлов проблемой / ошибкой? Может ли что-нибудь помочь на уровне приложения?