Получить немедленные подкаталоги в рубине
Я пытаюсь написать простой скрипт ruby, который скопирует файл в непосредственные подкаталоги каталога. Как бы я получить только непосредственные подкаталоги?
5 ответов
Dir.glob("**/")
вернет массив всех путей под текущим каталогом. Оттуда вы можете отфильтровать список и скопировать файл с File.copy(from, to)
Предполагая, что вам нужны только непосредственные подкаталоги, вы можете использовать Dir['*/']
(который объединяет ответы Майкла Сепкота и Гленры).
Если вы хотите найти все непосредственные подкаталоги (всего на один уровень ниже, где вы находитесь), попробуйте это:
Dir.chdir("/some/path/you/want/to/check/below")
subdir_list=Dir["*"].reject{|o| not File.directory?(o)}
То есть: изменить каталог где-нибудь, создать массив файлов, найденных там, отбросить те элементы массива, которые не являются каталогами, и вернуть полученный массив данных.
Вероятно, лучший способ работы с файлами в Ruby Pathname
, Он объединяет методы класса из нескольких файловых модулей в один удобный для использования класс ООП. Таким образом, вам не нужно передавать значение в метод, как вы должны с Dir
или же File
Вы можете просто вызвать метод для самого объекта.
Вот как распечатать непосредственные подкаталоги:
require 'pathname'
puts Pathname('some/directory').children.select(&:directory?)
Основываясь на ответе @glenra, но без постоянного изменения каталога (что может вызвать проблемы с
pry
):
def folders
Dir.chdir("/some/path/you/want/to/check/below") {
Dir["*"].reject{|o| not File.directory?(o)}
}
end
puts folders # ["all", "the", "folders"]
binding.pry # yay, works