Получить немедленные подкаталоги в Ruby
Вопрос
Я пытаюсь написать простой Ruby-скрипт, который будет копировать файл в ближайшие подкаталоги каталога.Как мне получить только непосредственные подкаталоги?
Решение
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?)