Ruby實現的一個強大的大量刪除檔案指令碼分享_ruby專題

來源:互聯網
上載者:User

最近打包伺服器上的apk包又增多了,每次手動rm操作過於麻煩,於是花了幾分鐘寫了一個可以對指定目錄下根據最後修改時間和萬用字元匹配進行大量刪除的指令碼。將這個指令碼加入crontab中之後,以後就再也不用擔心多餘的安裝包佔用磁碟空間了。

簡短的代碼

複製代碼 代碼如下:

#!/usr/bin/env ruby
# encoding: utf-8
#Usage: ruby removeOldFiles.rb "dest_file_pattern" days_ago
destFilePattern= ARGV[0]
daysAgo= ARGV[1]
edenTime = Time.now.to_i - daysAgo.to_i * 86400
Dir[destFilePattern].each{|child|
    system "rm -rfv #{child}"   if (File.mtime(child).to_i < edenTime)
}

如何使用

使用起來很簡單,使用規則如下

複製代碼 代碼如下:

ruby removeOldFiles.rb "dest_file_pattern" days_ago

舉個例子,比如我們想刪除/tmp目錄下的,所有最後修改時間為3天前的apk檔案,我們只需要這樣執行。

複製代碼 代碼如下:

ruby removeOldFiles.rb "/tmp/*.apk" 3

為什麼第一個參數使用雙引號

第一個參數為包含萬用字元的路徑,在shell中存在一個工具就是glob會將包含萬用字元的路徑匹配到具體的檔案,比如這樣的一段代碼。

複製代碼 代碼如下:

!/usr/bin/env ruby
# encoding: utf-8
puts ARGV.length
ARGV.each do |a|
    puts "Argument: #{a}"
end

我們傳入含有萬用字元的路徑參數,得到的結果就是glob匹配後的檔案名稱(前提是萬用字元可以匹配到檔案)。

複製代碼 代碼如下:

10:41 $ ruby test.rb *.txt
2
Argument: abc.txt
Argument: def.txt

為了避免進行glob操作,需要對包含萬用字元的路徑參數使用雙引號標記。

複製代碼 代碼如下:

10:41 $ ruby test.rb "*.txt"
1
Argument: *.txt

所以在使用指令碼時第一個參數一定要使用雙引號。

如何遍曆檔案包含子目錄內的

比如我們想遍曆/tmp/abc/def.txt 我們可以使用/tmp/**/.txt即可

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.