Net :: SFTP排序目录文件?

时间:2013-07-01 12:57:14

标签: ruby sorting net-sftp

我目前正在执行以下操作以获取目录中所有文件的列表:

Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
  sftp.dir.foreach("/path") do |entry|
    puts entry.name
  end
end

但是,这似乎是随机列出的文件。我需要按名称订购文件。

那么,我如何按名称对文件进行排序?

2 个答案:

答案 0 :(得分:3)

由于SFTP只返回服务器发送的排序,您可以手动对结果进行排序:

entries = sftp.dir.entries("/path").sort_by(&:name)
entries.each do |entry|
  puts entry.name
end

答案 1 :(得分:0)

这并不是OP想要的,但是这是一个按修改日期排序的示例,它首先列出了最早的文件。您可以轻松地对此进行调整,以按其他任何属性进行排序,反向排序等。

它也过滤掉目录和点文件,最终只返回文件名,没有前面的路径。

def files_to_process
  sftp.dir
      .glob(inbox_path, '*')
      .reject { |file| file.name.starts_with?('.') }
      .select(&:file?)
      .sort { |a, b| a.attributes.mtime <=> b.attributes.mtime }
      .map(&:name)
end