Ruby 是否对目录文件进行排序?
我目前正在执行以下操作以获取目录中所有文件的列表:Ruby 是否对目录文件进行排序?,ruby,sorting,net-sftp,Ruby,Sorting,Net Sftp,我目前正在执行以下操作以获取目录中所有文件的列表: Net::SFTP.start('host', 'username', :password => 'password') do |sftp| sftp.dir.foreach("/path") do |entry| puts entry.name end end 但这似乎是随机列出的文件。我需要按文件名排序 那么,如何按名称对文件进行排序呢?由于SFTP只是返回服务器发送的排序,您可以手动对结果进行排序: entries
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
sftp.dir.foreach("/path") do |entry|
puts entry.name
end
end
但这似乎是随机列出的文件。我需要按文件名排序
那么,如何按名称对文件进行排序呢?由于SFTP只是返回服务器发送的排序,您可以手动对结果进行排序:
entries = sftp.dir.entries("/path").sort_by(&:name)
entries.each do |entry|
puts entry.name
end
这不是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
def文件到进程
sftp.dir
.glob(收件箱路径“*”)
.reject{| file | file.name.u以?('.')}开头
.选择(&:文件?)
.sort{| a,b | a.attributes.mtime b.attributes.mtime}
.map(&:name)
结束