Ruby SFTP删除目录

时间:2013-11-09 14:44:47

标签: ruby sftp net-ssh

我想使用带有ruby的sftp删除目录。目前我正在尝试使用来自ruby的Net-sftp库的this方法(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")

目录不是空的,所以我必须逐个递归地删除它们,还是有办法在单个命令中实现它?

修改

我可以设法删除目录。我需要做两件事:

  1. 目录必须为空
  2. /\.|\.\./需要/^(\.|\.\.)$/,否则文件也被排除,因此目录不会为空。
  3. 但是在删除之前遍历所有目录的速度很慢,那么,有更快的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以将rmdir委派给底层的ssh会话

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

答案 1 :(得分:0)

LFTP(http://lftp.yar.ru)具有递归删除功能。但是没有Ruby包装器;你必须通过系统调用来使用它。