Как я могу создать дерево файлов/каталогов из результатов Net-SFTP?

Я пытаюсь создать дерево файлов и каталогов с помощью библиотеки net-sftp.

Я могу получить рекурсивный список файлов с помощью метода .glob и определить, является ли один из результатов каталогом с помощью метода .opendir.

Мне удалось создать хэш с файлами и другой хэш с каталогами, но я хотел бы создать дерево.

 files = []
 directories = []

 sftp.dir.glob("/home/**/**") do |entry|
      fullpath = "/home/" + entry.name
      file = Hash.new
      file[:path] = fullpath

        sftp.opendir(fullpath) do |response|
          unless response.ok?
            files.push(file)
          else
            directories.push(file)         
          end
        end

    else
    end

  end

Возможно ли создание такого дерева из результатов, которые возвращает net-sftp?


person Jamie Little    schedule 04.02.2015    source источник


Ответы (1)


Мне удалось сгенерировать дерево с помощью следующего кода:

def self.get_tree(host, username, password, path, name=nil)

  data = {:text =>(name || path)}
  data[:children] = children = []

  Net::SFTP.start(host, username, :password => password) do |sftp|

    sftp.dir.foreach(path) do |entry|
      next if (entry.name == '..' || entry.name == '.')

      if entry.longname.start_with?('d')
        children << self.get_tree(host,username,password, path + entry.name + '/')
      end

      if !entry.longname.start_with?('d')
        children << entry.name
      end
    end
  end
end

Это рекурсивная функция, которая создаст полное дерево при указании пути к каталогу с помощью Net::SFTP.

person Jamie Little    schedule 27.08.2016