我想使用 sftp 和 ruby 删除一个目录。目前我正在尝试来自 ruby 的 Net-sftp 库的这种方法(rmdir)。
这是我的代码:
uri = URI(url)
Net::SFTP.start(uri.host, uri.user, :password => uri.password) do |sftp|
handle = sftp.opendir!(uri.path)
sftp.readdir!(handle).each do |item|
unless item.name =~ /\.|\.\./
sftp.rmdir!(uri.path + "/" + item.name)
end
end
end
但我唯一能想到的是这个错误:
Net::SFTP::StatusException : Net::SFTP::StatusException (4, "failure")
目录不是空的,所以我必须递归地一个一个地删除它们,或者有没有办法在一个命令中实现?
编辑
我可以设法删除目录。我需要完成两个发现:
- 目录必须为空
/\.|\.\./
需要/^(\.|\.\.)$/
,否则文件也被排除在外,因此目录永远不会为空。
但是在删除之前遍历所有目录很慢,那么,有没有更快的方法?