5

Samba 共有から読み取る方法を探しています。Dirディレクトリのオープンや読み込みなど、クラスのように使いたい。これはRubyで可能ですか?

4

4 に答える 4

3

Sambala gem は、ホスト OS が Posix (UNIX ライク) システムの場合に機能するはずです (Windows についてはわかりません...)。

gem install sambala

この gem は、ホスト OS が $PATH のどこかに動作する smbclient 実行可能ファイルを持っている限り動作します。Mac OS X、Linux、またはその他の UNIX バリアントを使用している限り、ターミナルから次のコマンドを実行して、パスのどこかに smbclient があるかどうかを確認できます。

which smbclient

結果が得られない場合は、現在のホスト OS の smbclient を取得する方法について Google 検索を実行してください。Mac OS X を使用している場合は、単にMacPortsをインストールしてから、ターミナルから次のコマンドを実行して smbclient をインストールできます。

sudo port install samba3
于 2011-10-12T04:43:21.000 に答える
1

あなたは私の宝石をチェックしようとすることができると思います.sambalaで同じ問題を抱えているので始めました

https://github.com/reivilo/rsmbclient

于 2011-12-04T13:18:48.377 に答える
0

Sambala gemは、Posix(UNIXライク)システムでの1.8.xRuby実装で機能します

gem install sambala

1.9.xの場合、Posix上のRubyはGLSIGNALのフォークを使用します。

git clone https://github.com/glsignal/sambala.git
cd sambala
gem build samabala
gem install ./sambala.gem

注:GLSignalのgemは、1.9.xで実行するようにパッチが適用された豊富なgithubソースを使用します

lottscarsonが述べているように、これらのgemは、ホストOSの$PATHのどこかに実行可能なsmbclientが機能している限り機能します。Mac OS X、Linux、またはその他のPosixバリアントを使用している限り、ターミナルから次のコマンドを実行して、パスのどこかにsmbclientがあるかどうかを確認できます。

which smbclient

結果が得られない場合は、現在のホストOSのsmbclientを取得する方法をグーグル検索してください。(例)

(RHEL/CENTOS/etc) yum install samba

(ubuntu/debian) sudo apt-get install samba smbfs

(osx) brew install samba

smbclientのラッパーの代わりに、「net-smb」と呼ばれるC拡張のrubygemを使用できます。これにはネイティブコンパイルが必要であり、純粋なルビーとは書かれていません。

gem install net-smb

これにはいくつかのことも必要です。

Ruby 1.9.3+
Samba 3.5+ (libsmbclient)
C compiler

インストール例

sudo apt-get install libsmbclient libsmbclient-dev
于 2013-01-09T16:01:13.037 に答える
0

Ruby_SMBは、SMB プロトコル ファミリのネイティブ Ruby 実装です。

READMEから:

  sock = TCPSocket.new address, 445
  dispatcher = RubySMB::Dispatcher::Socket.new(sock)

  client = RubySMB::Client.new(dispatcher, username: 'msfadmin', password: 'msfadmin')
  client.negotiate
  client.authenticate

  begin
    tree = client.tree_connect('TEST_SHARE')
    puts "Connected to #{path} successfully!"
  rescue StandardError => e
    puts "Failed to connect to #{path}: #{e.message}"
  end

  files = tree.list(directory: 'subdir1')

  files.each do |file|
    create_time = file.create_time.to_datetime.to_s
    access_time = file.last_access.to_datetime.to_s
    change_time = file.last_change.to_datetime.to_s
    file_name   = file.file_name.encode("UTF-8")

    puts "FILE: #{file_name}\n\tSIZE(BYTES):#{file.end_of_file}\n\tSIZE_ON_DISK(BYTES):#{file.allocation_size}\n\tCREATED:#{create_time}\n\tACCESSED:#{access_time}\n\tCHANGED:#{change_time}\n\n"
  end
于 2019-05-01T19:17:05.503 に答える