簡體   English   中英

使用Ruby SFTP`remove`和`remove!`刪除文件。

[英]Delete a file using Ruby SFTP `remove` and `remove!`

我正在嘗試使用Ruby net/sftp從FTP中舊刪除文件,但是我一直收到錯誤消息,指出該文件不存在。

:error=>"Net::SFTP::StatusException (2, \"no such file\")"

使用相同的憑據登錄時,我可以手動刪除文件,所以我知道我有許可。

require 'net/sftp'
ftp = Net::SFTP.start(@ftp_url, @ftp_user, :password =>  @ftp_pwd)
ftp.dir.entries('somePath').each do |entry|
    begin
      age_days = (Time.now.to_i - entry.attributes.atime) / 86400

      if(age_days > ftp_max_file_age_days)
        ftp.remove!(entry.name)
      end

    rescue Exception => e
      # log error here
    end
end

我更喜歡remove! 因此在這種情況下,所有操作都是同步發生的,但是我也嘗試過remove

我還嘗試給它提供文件的完整路徑,而不僅僅是輸入條目名稱(例如'somePath' + entry.name而不是僅僅entry.name )。 我在想也許是因為我需要更改工作目錄,但顯然net/sftp不允許這樣做。

提前致謝!

檢查entry是否是目錄(如果是),然后使用ftp.rmdir 像下面-

require 'net/sftp'
ftp = Net::SFTP.start(@ftp_url, @ftp_user, :password =>  @ftp_pwd)
ftp.dir.entries('somePath').each do |entry|
  begin
    age_days = (Time.now.to_i - entry.attributes.atime) / 86400

    if(age_days > ftp_max_file_age_days)
      if File.directory?(entry.name)
        ftp.rmdir(entry.name) 
      else         
        ftp.remove!(entry.name)
      end
    end

  rescue Exception => e
    # log error here
  end
end

最終,我們能夠使用remove方法(而不是remove! )刪除文件。我們對提供密碼的方式進行了小的更改。

我們確認FTP的權限沒有更改,因此我認為使用non_interactive: true可能是訣竅。

require 'net/sftp'

def self.delete_report(endpoint, username, password, report_filename)
  SSH_OPTIONS = { non_interactive: true }.freeze
  report_filename_base = File.basename(report_filename, '.*')

  Net::SFTP.start(endpoint, username, SSH_OPTIONS.merge(password: password)) do |sftp|
    sftp.remove(report_filename)
    sftp.remove("#{report_filename_base}.fin")
    sftp.remove("processed/#{report_filename}")
    sftp.remove("processed/#{report_filename_base}.fin")
    sftp.remove("failed/#{report_filename}")
    sftp.remove("failed/#{report_filename_base}.fin")
    sftp.remove("failed/#{report_filename_base}.info")
  end

我仍然不完全理解為什么以前無法使用相同的方法,但是我們也能夠刪除子文件夾中的文件,如本示例所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM