首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:获取文件列表的最快方法

:获取文件列表的最快方法
EN

Stack Overflow用户
提问于 2013-07-16 17:57:19
回答 1查看 10K关注 0票数 2

我使用的是ruby Net-sftp创业板,在下载之前我需要下载大量的小文件,我需要确保获得给定目录中的文件列表。

为了做到这一点,我使用sftp.dir.entries('folder path').size来获取文件计数列表,但是对10,000个以上的文件执行这个操作需要花费太多的时间(甚至是小时),有更好的方法吗?

即使我尝试使用ssh.exec!("ls -l"),这也是缓慢的。

我正在尝试连接到windows box,它是windows server 2008 R2

EN

回答 1

Stack Overflow用户

发布于 2013-10-28 21:18:18

要下载一系列具有验证功能的文件,我将执行如下操作:

代码语言:javascript
复制
Net::SFTP.start(ftp_host, user, :password => password) do |sftp|
  sftp.dir.entries('/path/to/folder').each do |remote_file|
    if passes_validation?(remote_file)
      file_data = sftp.download!('/path/to/folder' + '/' + remote_file.name)
      local_file = File.open('/path/to/local', 'wb')
      local_file.print file_data
      local_file.close
    end
  end
end

使用这种方法时要记住的一点是,SFTP服务器协议中存在差异,这会影响remote_file可以访问多少属性;您可以在打开连接后调用sftp.protocol来检查正在使用的协议。

或者,如果您想尝试将验证作为查询的一部分传递给SFTP,如果您的验证是基于文件扩展名的,可以尝试.glob("/path/to/folder", "*.ext")而不是.entries,尽管我不能说明它将如何快速工作(Documents这里)。理论上,它可以加快查询速度(返回的数据较少),但由于它涉及更多的前期工作,我不确定它会有帮助。

我的脚本运行于一个VirtualBox,运行Ubuntu 12,专用内存为2GB(主机是Windows7),并连接到安装了Windows 2008 R2 SP1的服务器,运行SolarWind的SFTP部分;Ruby1.9.3p392,Net 2.1.2和Net-SH2.6.8。有了这些技术规范,我平均每分钟大约有78个文件(尽管没有验证)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17683743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档