我最近开始使用Ruby,并想知道是否有办法将列表输出转换为对象,以便我可以访问属性。
要更清楚一点,这是我的输出
find ./* -type f | xargs ls -l
-rw-r--r-- 1 ncktrnl staff 0 Sep 4 18:52 ./dir1/file3
-rw-r--r-- 1 ncktrnl staff 0 Sep 4 18:52 ./file1
-rw-r--r-- 1 ncktrnl staff 0 Sep 4 18:52 ./file2
现在我想将上面的列表转换为File或Dir对象,以便我可以轻松访问属性。
例如:
output = `find ./* -type f | xargs ls -l`
out_arr = output.split("\n")
out_arr.each do |line|
f = File.new(line)
puts "#{f.mtime}" # => prints mtime after parsing the line
end
我使用File.new
作为示例,但我不认为这是如何工作的,所以我想知道是否有办法做到这一点。我可以编写自己的解析器但不确定是否存在已存在的东西。我无法创建实际文件的文件对象,因为我通过在其他主机上运行远程ssh命令来获取列表。
答案 0 :(得分:0)
最明显的方法是使用std-lib中的pathname或find来处理这个问题。使用each_child
方法或类似的方法,以及任何过滤,您可以执行此操作,而无需根据外部命令执行此操作。
您也可以使用File
和Dir
对象在不触及std-lib的情况下执行相同操作。
虽然您可以手动提取路径(仅限)并创建文件实例,但您无法创建具有所需详细信息的File对象。但实际上,完全避免使用外壳命令是最好的选择。
答案 1 :(得分:0)
有net-ftp-list gem,它可以解析来自不同远程系统的ls输出。