gpt4 book ai didi

ruby - 将 "ls -l"输出转换为类似于 File 的对象

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:10 25 4
gpt4 key购买 nike

我最近开始使用 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 命令来获取列表的。

最佳答案

最明显的方法是使用 pathnamefind从 std-lib 来处理这个。使用 each_child 方法,或类似的方法,连同任何过滤,您可以做到这一点,而根本不需要 shell out 到外部命令。

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

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

关于ruby - 将 "ls -l"输出转换为类似于 File 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com