【问题标题】:Ruby SFTP—delete directoryRuby SFTP——删除目录
【发布时间】:2020-01-15 01:23:41
【问题描述】:

我想使用 sftp 和 ruby​​ 删除一个目录。目前我正在尝试来自 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. /\.|\.\./ 必须是 /^(\.|\.\.)$/,否则文件也会被排除,因此目录永远不会为空。

但是在删除之前遍历所有目录很慢,那么,有没有更快的方法?

【问题讨论】:

    标签: ruby sftp net-ssh


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多