【问题标题】:Net::SFTP sort directory files?Net::SFTP 排序目录文件?
【发布时间】:2020-02-12 23:56:22
【问题描述】:

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

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

但这似乎是随机列出的文件。我需要按名称对文件进行排序。

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

【问题讨论】:

    标签: ruby sorting net-sftp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这不是 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 2015-04-27
        • 1970-01-01
        相关资源
        最近更新 更多