2017-02-13 94 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']