我正在寻找一种从samba共享中读取的方法。我想像Dir
类一样使用它,例如打开和读取目录。这在Ruby中是否可行?
答案 0 :(得分:3)
如果您的主机操作系统是Posix(类UNIX)系统(不确定Windows ...),Sambala gem应该适合您:
gem install sambala
只要您的主机操作系统在$ PATH中的某个位置具有可用的smbclient可执行文件,此gem就可以正常工作。只要您使用的是Mac OS X,Linux或其他一些UNIX变体,您就应该可以从终端运行以下命令,看看您的路径中是否有某个smbclient:
which smbclient
如果您没有得到结果,请进行谷歌搜索,了解如何获取当前主机操作系统的smbclient。如果您使用的是Mac OS X,只需install MacPorts,然后从终端运行以下命令即可安装smbclient:
sudo port install samba3
答案 1 :(得分:1)
我认为你可以尝试检查我的宝石,我已经启动它因为我和sambala有同样的问题
答案 2 :(得分:0)
Sambala gem适用于Posix(类UNIX)系统上的1.8.x Ruby实现
gem install sambala
对于1.9.x Ruby on Posix使用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可执行文件,这些宝石就会起作用。只要您使用的是Mac OS X,Linux或其他一些Posix变体,您就应该可以从终端运行以下命令,看看您的路径中是否有smbclient:
which smbclient
如果您没有得到结果,请进行谷歌搜索,了解如何获取当前主机操作系统的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
答案 3 :(得分: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