2017-02-13 96 views
0

我有一个具有以下内容的tar文件:提取tar文件:errno的:: ENAMETOOLONG:文件名过长@ rb_sysopen

/results/02-12-2017_13:17:41/ 
├── events.log 
├── network_hosts.gnmap 
├── network_hosts.nmap 
├── network_hosts.xml 
├── report.xml 
└── results.xml 

在试图提取与Nokogiri我解析文件m到处以下错误rails console

Errno::ENAMETOOLONG: File name too long @ rb_sysopen

这是到目前为止我的代码:

test = Test.find(test_id) 
gzip = Zlib::GzipReader.open(test.data.path) 

entries = {} 
tar_extract = Gem::Package::TarReader.new(gzip) 
tar_extract.rewind 
tar_extract.each do |entry| 
    entries[File.basename(entry.full_name)] = entry.read 
end 

host_file = File.open(entries["network_hosts.xml"]) { |f| Nokogiri::XML(f) } 

到最后,我的代码似乎打开host_file因为它输出的内容到控制台,但它不保存任何东西到host_file因为该错误发生的事情:

Errno::ENAMETOOLONG: File name too long @ rb_sysopen - <?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE nmaprun> 
<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?> 
<nmaprun scanner="nmap" args="nmap -sn -oA /results/02-10-2017_18:17:34/network_hosts 10.10.10.1 10.10.10.2" start="1486768654" startstr="Fri Feb 10 18:17:34 2017" version="7.12" xmloutputversion="1.04"> 
.................. 
</nmaprun> 
from (pry):102:in `initialize' 

我在做什么错在这里?

回答

1

File.open(entries["network_hosts.xml"])获取network_hosts.xml的内容并尝试将其用作打开文件的文件名。由于您已阅读network_hosts.xml的内容并将其保存到条目中,因此您可以直接将字符串转换为XML:

host_file = Nokogiri::XML entries['network_hosts.xml']