3

最近 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 コマンドを実行してリストを取得しているため、実際のファイルのファイル オブジェクトを作成できません。

4

2 に答える 2

1

これを行う最も明白な方法は、パス名を使用するか、std-lib から検索してこれを処理することです。メソッドまたはそのようなものを使用してeach_child、任意のフィルタリングとともに、外部コマンドにシェルアウトする必要なくこれを行うことができます。

Fileオブジェクトを使用して、std-lib に触れずに同じことを行うこともできDirます。

必要な詳細を含む File オブジェクトを作成することはできませんが、パス (のみ) を抽出して手動でファイル インスタンスを作成することはできます。ただし、実際には、外部シェル コマンドを完全に回避することが最善の策です。

于 2012-09-05T02:07:06.323 に答える
0

さまざまなリモート システムからの ls 出力を解析できるnet-ftp-list gem があります。

于 2013-12-18T18:11:18.440 に答える