Samba 共有から読み取る方法を探しています。Dir
ディレクトリのオープンや読み込みなど、クラスのように使いたい。これはRubyで可能ですか?
4 に答える
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
あなたは私の宝石をチェックしようとすることができると思います.sambalaで同じ問題を抱えているので始めました
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
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