Можно ли удалить каталог в постоянное время?

Обычно я rm -rf весь каталог сразу с помощью rm -rf . Я только сейчас заметил, что это занимает больше времени, чем больше каталог (рекурсивно пересчитан).

Как unix-подобные системы предоставляют альтернативный способ удаления каталога, который работает в постоянное время? Кажется, что нужно удалить каталог «напрямую», не касаясь содержимого вообще, которые теперь недоступны.

Есть ли какая-то характеристика файловых систем, которая заставляет вас рекурсивно ходить по содержимому каталога, чтобы удалить сам каталог?

4 Solutions collect form web for “Можно ли удалить каталог в постоянное время?”

Когда вы удаляете каталог, вы должны удалить его содержимое рекурсивно. Почему это так?

Упрощение можно сказать, что «directory» – это файл, содержащий список пар. Что произойдет, если вы просто «освободите блоки каталога на диске»?

Давайте рассмотрим удаление обычных файлов. Программа (например, rm ) вызывает системный вызов unlink() . Операционная система (а точнее, драйвер файловой системы) проверяет количество жестких ссылок ( filename в каталоге в предыдущем абзаце). Если он равен нулю, и файл не открывается, его можно физически удалить. Таким образом, мы знаем, как удалить файл.

Теперь давайте снова посмотрим на удаление каталога. Когда вы просто освобождаете блоки, вы не unlink файлы в нем, вы не уменьшаете счетчик жестких ссылок для любого файла в каталоге. И для любого файла в подкаталогах, подкаталогах и т. Д. Что такое заключение? Точно, нам нужно unlink все файлы в unlink каталоге, потому что мы не хотим получать неустранимый мусор в Файловой системе.

Таким образом, вы можете использовать решение @ SYN (запуск rm в фоновом режиме), но нет способа удалить каталог в постоянное время.

Если каталог монтируется в собственной файловой системе, вы можете размонтировать его, воссоздать с помощью newfs и перемонтировать его. Это займет столько же времени, независимо от размера каталога.

Как unix-подобные системы предоставляют альтернативный способ удаления каталога, который работает в постоянное время? Кажется, что нужно удалить каталог «напрямую», не касаясь содержимого вообще, которые теперь недоступны.

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

Обратите внимание, что btrfs поддерживает выгрузку поддерева в постоянное время, но вы должны заранее использовать его.

Использование:

 rm -fr /path/to/directory & 

Это будет означать вашу команду

Вы можете перечислить заданные задачи с jobs

Будет указан идентификатор задания. Который может быть использован с возвратом к вашему процессу:

 $ sleep 60 & [1] 22316 $ jobs [1]+ Running sleep 60 & $ fg %1 sleep 60 

После того, как вы уже запустили команду rm , вы также можете нажать Ctrl + Z , что приостановит вашу команду, а затем введите bg для отмены паузы в фоновом режиме.

Обратите внимание, что список заданий, которые вы можете контролировать с помощью этих команд, привязан к вашей оболочке и может быть восстановлен только из текущей оболочки.

  • рекурсивно удалять все файлы, пустые каталоги и каталоги с файлами из нескольких имен в текущем каталоге, включая текущий каталог
  • Как удалить файлы и папки под определенной папкой
  • Почему «rm *» не работает, когда есть файлы, начинающиеся с дефиса?
  • Ускорение команды поиска rm с проверкой путем распараллеливания
  • Рекурсивно удалять SVN-файлы
  • Удаление каталога
  • Как удалить файл с именем «--append»?
  • как удалить все файлы в папке, кроме только определенных файлов?
  • Предотвратите случайное удаление файла
  • Команда rm возвращает сообщение 12345 Что это значит?
  • Предотвращение удаления папок с псевдонимом system / shell aliased
  • Linux и Unix - лучшая ОС в мире.