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 つの調査結果です。
- ディレクトリは空にする必要があります
/\.|\.\./
/^(\.|\.\.)$/
そうしないと、ファイルも除外されるため、ディレクトリが空になることはありません。
しかし、それらを削除する前にすべてのディレクトリをトラバースするのは遅いので、より速い方法はありますか?