Получить немедленные подкаталоги в рубине

Я пытаюсь написать простой скрипт 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

Другие вопросы по тегам