ruby如何实现文件夹的整体传输

JacobZhu 发布于 2012/02/29 09:36
阅读 1K+
收藏 1
ruby如何实现文件夹的整体传输,ruby的api中只有传输文件,写了个类处理文件夹的传输,发现速度很慢,各种问题,想了解一下ruby在处理文件夹的传输的时候通常是怎么做的,用的什么工具
加载中
0
Yisen
Yisen
递归吧?
0
axhack
axhack

Dir[File.join(Rails.root, "lib", "**")].to_json

递归之后转成json格式进行传输。

0
JacobZhu
JacobZhu
递归感觉很慢,有没有什么整体传输的方式,或者第三方的类库,Chilkat Ruby貌似收费的,比如download(remotefoldername,localfoldername)
0
deleted
deleted
我觉得遍历文件夹再慢也影响不到哪去, 瓶颈在两个节点的进/出带宽以及双方的I/O
0
JacobZhu
JacobZhu

require 'net/ftp'

def downloadtree(path,localdir)
#system("ftp -A 192.168.100.98 && cd 7.0")
#login

ftp = Net::FTP.new('192.168.100.98')
ftp.login
puts "bbbbbbbbbbbb"
#找出dirs跟files
dir=ftp.ls(path).find_all{|i|i[0,10]=='drw-rw-rw-'}.map{|i|i.split(' ',9)[-1]}
list=ftp.ls(path).partition{|i|i[0,10]=='drw-rw-rw-'}
a = list[0].size()
b = list[1].size()
puts "ccccccccc"
puts path
puts a+b #5
puts a #2 目录
puts b #3 文件+1
puts dir.size() #2目录
puts 'df'


#if (ftp.list(path).size()-3)>0
 # else files = ftp.nlst(path)
#puts "aaaaaaaaaa"
#end
if (b-1)>0
files = ftp.nlst(path)
end

dirnum=dir.size()
puts dirnum
for i in 2...dirnum do
if File.exist?(localdir+dir[i])
   puts "file not exist"
  else
    puts "mkdir file" + localdir+dir[i]
  Dir.mkdir(localdir+dir[i])
  puts "make file sucess"
end
puts path+dir[i]+'\\'+"  download to   "+localdir+dir[i]+'\\'
#flag = ftp.nlst(path+dir[i]+'\\').size()>0
#puts flag
#if flag
downloadtree(path+dir[i]+'\\',localdir+dir[i]+'\\')
end


#down files
filenum=files.size()
for i in 0...filenum do
  puts 5678
 remotefile=files[i]
 localfile=files[i]
 puts path+remotefile+ "  soga   "+localdir+localfile
 ftp.getbinaryfile(path+remotefile,localdir+localfile,1024)
end

end


downloadtree('\\tools\\SERVER\\TOMCAT\\','D:\\RubyTest\\')


0
JacobZhu
JacobZhu

可否帮忙看看我这里的问题,每次执行的时候都会有报错:

\tools\SERVER\TOMCAT\tomcat-5.5\webapps\jsftpdirdownload.rb:52:in `downloadtree': undefined method `size' for nil:NilClass (NoMethodError)

0
sevk
sevk
先把整个目录zip一下,再传输。
绿海荡舟
绿海荡舟
我觉得这个方法可以是最简便的。
0
绿海荡舟
绿海荡舟
或者你用 rsync 来做。
sevk
sevk
对, 用rsync 来同步修改的文件是最好的了.
返回顶部
顶部