我正在寻找一种从 samba 共享中读取的方法。我想像Dir
类一样使用它,例如打开和读取目录。这在Ruby中可能吗?
4 回答
如果您的主机操作系统是 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
我想你可以试着检查我的宝石,我已经开始了,因为我对桑巴拉有同样的问题
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
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