2013-11-09 54 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}")