2013-11-09 50 views
0

我想用红宝石sftp删除一个目录。目前,我正在尝试使用来自Net-sftp红宝石库的this方法(rmdir)。红宝石SFTP删除目录

这里是我的代码:

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") 

的目录是不是空的,所以我必须通过递归删除一个一个,还是有办法在一个命令中实现这一点?

编辑

我可以设法删除目录。需要由我来两个发现:

  1. 目录需要空
  2. /\.|\.\./必须/^(\.|\.\.)$/,否则文件被排除在外了,所以目录惯于永远是空的。

但是在删除它们之前遍历所有的目录很慢,所以有更快的方法吗?

回答

0

LFTP(http://lftp.yar.ru)有递归删除。没有Ruby包装,虽然;你将不得不通过系统调用来使用它。

0

你可以委托rmdir来底层SSH会话,而不是

@sftp.session.exec!("rm -rf #{uri.path}")