4

rubyでsftpを使ってディレクトリを削除したい。現在、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")

ディレクトリは空ではないので、1つずつ再帰的に削除する必要がありますか、または単一のコマンドでそれを達成する方法はありますか?

編集

ディレクトリを削除することができました。私が行う必要があったのは、次の 2 つの調査結果です。

  1. ディレクトリは空にする必要があります
  2. /\.|\.\.//^(\.|\.\.)$/そうしないと、ファイルも除外されるため、ディレクトリが空になることはありません。

しかし、それらを削除する前にすべてのディレクトリをトラバースするのは遅いので、より速い方法はありますか?

4

1 に答える 1

4

代わりに、rmdir を基礎となる ssh セッションに委任できます

sftp.session.exec!("rm -rf #{uri.path}")
于 2016-09-28T20:29:30.480 に答える