Как удалить непустую директорию, используя класс Dir? - PullRequest
23 голосов
/ 16 мая 2011
Dir.delete("/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh")  

вызывает эту ошибку:

Каталог не пуст - /usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh

Как удалить каталог, даже если он ещесодержит файлы?

Ответы [ 3 ]

50 голосов
/ 16 мая 2011

Невозможно с Dir (за исключением итерации по каталогам самостоятельно или использования Dir.glob и удаления всего).

Вы должны использовать

require 'fileutils'
FileUtils.rm_r "/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh"
6 голосов
/ 16 мая 2011

Когда вы удаляете каталог с Dir.delete, он также будет искать файлы в подкаталогах.

Dir.delete("/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh")

Если каталог не был пустым, возникнет ошибка Directory not empty.Для этого рубина есть метод FiltUtils.rm_r, который удалит каталог, несмотря ни на что!

require 'fileutils'
FileUtils.rm_r "/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh"
0 голосов
/ 18 апреля 2018

Я использую bash напрямую с помощью команды system(*args) следующим образом:

folder = "~/Downloads/remove/this/non/empty/folder"
system("rm -r #{folder}")

Это не совсем зависит от ruby, но поскольку в этом случае bash проще, я часто использую это для очистки временных папок и файлов.Команда rm просто удаляет все, что вы ей даете, а флаг -r указывает рекурсивно удалять файлы, если папка не пуста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...