我正在尝试抓取FTP并递归下拉所有文件.
到目前为止,我试图用一个目录来下载
ftp.list.each do |entry| if entry.split(/\s+/)[0][0,1] == "d" out[:dirs] << entry.split.last unless black_dirs.include? entry.split.last else out[:files] << entry.split.last unless black_files.include? entry.split.last end
但结果是,如果将列表拆分到最后一个空格,则带有空格的文件名和目录将被取错.
在这里需要一点逻辑帮助.
解决方法
您还可以使用正则表达式.我把它放在一起.请验证它是否适合您,以及我不知道您的目录列表看起来不同.你必须使用Ruby 1.9 btw.
reg = /^(?<type>.{1})(?<mode>\S+)\s+(?<number>\d+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<mod_time>.{12})\s+(?<path>.+)$/ match = entry.match(reg)
您可以按名称访问元素
match [:type]包含一个’d’,如果它是一个目录,一个空格,如果它是一个文件.
所有其他元素也都存在.最重要的是匹配[:path].