2012-02-07 15 views
3

ログを圧縮し、Windows 2008 Serverで90日以上経過したものを削除するスクリプトを作成しています。私は、次の手順を実行して、近くに来ている:それはあなたのスクリプトがあることをやっていないされて何90日以上経過したログを削除する

find . -mtime +90 -type f -exec rm {} \; 
+0

ようです。 –

+0

@DaveNewtonあなたのご意見は分かりません。 ''独立して作業OSで内部シェル関数を使用していないスクリプトをルビするべきではありませんか?それが彼がスクリプトを書いている理由ですね。 – shime

+0

@shimeシェルスクリプト。 –

答えて

1

def remove_old_logs() 
    d = Time.now.localtime.strftime("%m-%d-%Y") 
    tfile = "c:/slog/sec/Archive/#{d}-logs.zip" 
    mtme=File.stat(tfile).mtime.to_s.split[0] 

    # Compare the old mtime with the old and remove the old. 
    Dir["c:/slog/sec/Archive/*"].each do |file| 
    ntme=File.stat(file).mtime.to_s.split[0] 
    FileUtils.rm(file) if mtme > ntme #'Time.now.localtime.strftime("%Y-%m-%d")' 
    end 
end 

私はRubyはLinuxの同等の操作を行うために取得するために行うために何をしなければなりません欲しいです?私が見ている唯一の重要なことは、ファイルまたはディレクトリであるかどうかを調べるテストで、findコマンドの-type fです。

File.file?('path/to/file') 

唯一の他のことは、90日以上経過しているかどうかを確認するテストですが、それを十分簡単に​​把握できるはずです。

+0

私は、ファイルには次の操作を行って、90日齢であったかどうかを計算する方法を考え出すことができました: #は年齢制限を定義して、秒単位での差を計算 old_files_age = 7776000 のctime = Time.now past_due_logs =(CTIME - old_files_age).to_s.split [0] これらの変数を定義して差異を計算した後、すべてが完全に機能しました。 – Jay

4

は、ここで再帰的に一致するように、Dir.glob**

require 'date' 

module Enumerable 
    def older_than_days(days) 
    now = Date.today 
    each do |file| 
     yield file if (now - File.stat(file).mtime.to_date) > days 
    end 
    end 
end 

# Example emulating `find /path/to... -mtime +90 -type f -exec rm {} \;` 
Dir.glob('/path/to/your/files/**/*').older_than_days(90) do |file| 
    FileUtils.rm(file) if File.file?(file) 
end 

ノートの使用、OSは独立して、やや慣用Rubyの方法です。 Cygwinをインストールして、ちょうどスクリプトを使用する方が簡単だろうよう

は(ちなみに、あなたがより効率的かつseparator problemを避けるために、シェル、find . -mtime +90 -type f -print0 | xargs -0 rmに考えるかもしれません)

関連する問題