Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将“ls-l”输出转换为类似于文件的对象_Ruby - Fatal编程技术网

Ruby 将“ls-l”输出转换为类似于文件的对象

Ruby 将“ls-l”输出转换为类似于文件的对象,ruby,Ruby,我最近开始使用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 现在

我最近开始使用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为例,但我不认为它是这样工作的,所以我想知道是否有办法做到这一点。我可以编写自己的解析器,但不确定是否有已经存在的东西。我无法创建实际文件的file对象,因为我是通过在其他主机上运行远程ssh命令来获取列表的

最明显的方法是使用或从std-lib处理此问题。使用each_child方法,或者类似的方法,以及任何过滤,您都可以做到这一点,而无需向外部命令抛出命令

您也可以使用File和Dir对象在不接触std lib的情况下执行相同的操作


虽然您可以仅提取路径并手动创建文件实例,但您无法创建具有所需详细信息的文件对象。实际上,完全避免使用外部shell命令是最好的选择。

还有gem,它可以解析来自不同远程系统的ls输出。

Daniel,情况是我使用Net::SSH在远程主机上运行该命令。一旦我得到了输出,我想把它转换成一个我可以轻松使用的结构。如果文件位于运行脚本的主机上,则可以使用文件或目录对象。但是,这不适用于远程ssh命令。您需要ls-l输出的哪些部分,以及远程系统上的具体操作系统是什么?我猜Linux和GNULS差不多都有。File name、permissions、size、mtime.ls-l-time style=full iso生成固定宽度的列,这些列具有易于解析的时间戳,因此您可以非常轻松地使用。我会演示,但我必须去做,所以我会把它留给其他人。我正在考虑为每一行创建一个openstruct,然后自己解析并输入值。不过,只是因为懒惰,所以想知道这样的东西是否已经存在。好问题,我也需要这个用于Net::FTP,因为FTP.mtimeone_文件在选择日期范围内的所有文件时效率非常低。