Ruby: изучение методов получения списка папок в каталоге

В этой статье блога мы рассмотрим различные методы Ruby для получения списка папок в указанном каталоге. Мы рассмотрим различные подходы, от базовых до более продвинутых, с примерами кода для демонстрации каждого метода. Давайте начнем!

Метод 1: Dir.entries
Метод Dir.entriesвозвращает массив, содержащий все записи (файлы и каталоги) в каталоге. Мы можем перебирать записи и отфильтровывать только каталоги, используя метод File.directory?.

def list_folders(directory)
  entries = Dir.entries(directory)
  folders = entries.select { |entry| File.directory?(File.join(directory, entry)) }
  folders.reject! { |folder| folder.start_with?(".") }  # Exclude hidden folders
  folders
end
# Example usage
folder_list = list_folders("/path/to/directory")
puts folder_list

Метод 2: Dir.glob
Метод Dir.globпозволяет нам сопоставлять и извлекать каталоги, используя сопоставление с образцом. Указав шаблон, соответствующий только каталогам, мы можем получить список папок внутри каталога.

def list_folders(directory)
  folders = Dir.glob(File.join(directory, "*")).select { |entry| File.directory?(entry) }
  folders.map { |folder| File.basename(folder) }
end
# Example usage
folder_list = list_folders("/path/to/directory")
puts folder_list

Метод 3: Find.find
Метод Find.findпозволяет рекурсивно перемещаться по каталогу и получать все каталоги внутри него. Он возвращает каждый путь к каталогу к блоку, что позволяет нам собирать результаты.

require 'find'
def list_folders(directory)
  folders = []
  Find.find(directory) do |path|
    next unless File.directory?(path)
    folders << path
  end
  folders.map { |folder| File.basename(folder) }
end
# Example usage
folder_list = list_folders("/path/to/directory")
puts folder_list

В этой статье мы рассмотрели три различных метода получения списка папок в каталоге с помощью Ruby. Мы рассмотрели метод Dir.entries, метод Dir.globс сопоставлением шаблонов и метод Find.findдля рекурсивного обхода каталогов. В зависимости от ваших требований вы можете выбрать наиболее подходящий метод для вашего проекта. Приятного кодирования!