5

我正在寻找一种从 samba 共享中读取的方法。我想像Dir类一样使用它,例如打开和读取目​​录。这在Ruby中可能吗?

4

4 回答 4

3

如果您的主机操作系统是 Posix(类 UNIX)系统(不确定 Windows...),Sambala gem 应该适合您:

gem install sambala

只要您的主机操作系统在您的 $PATH 中某处有一个工作的 smbclient 可执行文件,这个 gem 就可以工作。只要您使用的是 Mac OS X、Linux 或其他 UNIX 变体,您应该能够从终端运行以下命令,以查看您的路径中是否有 smbclient:

which smbclient

如果您没有得到结果,请在 Google 上搜索如何为您当前的主机操作系统获取 smbclient。如果您使用的是 Mac OS X,您可以简单地安装 MacPorts,然后从终端运行以下命令来安装 smbclient:

sudo port install samba3
于 2011-10-12T04:43:21.000 回答
1

我想你可以试着检查我的宝石,我已经开始了,因为我对桑巴拉有同样的问题

https://github.com/reivilo/rsmbclient

于 2011-12-04T13:18:48.377 回答
0

Sambala gem 将适用于 Posix(类 UNIX)系统上的 1.8.x Ruby 实现

gem install sambala

对于 Posix 上的 1.9.x Ruby,使用 GLSIGNAL 的 fork。

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

注意:GLSignal 的 gem 使用 github 的丰富资源,该资源已修补以在 1.9.x 上运行

正如lottscarson 所说,只要您的主机操作系统在您的$PATH 中某处有一个工作的smbclient 可执行文件,这些gem 就可以工作。只要您使用的是 Mac OS X、Linux 或其他 Posix 变体,您应该能够从终端运行以下命令,以查看您的路径中是否有 smbclient:

which smbclient

如果您没有得到结果,请在 Google 上搜索如何为您当前的主机操作系统获取 smbclient。(例子)

(RHEL/CENTOS/etc) yum install samba

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

(osx) brew install samba

作为 smbclient 包装器的替代方案,您可以使用名为“net-smb”的 C 扩展 ruby​​ gem。这需要本机编译,并且不是纯 ruby​​ 编写的。

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 实现。

自述文件

  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 回答