ログを圧縮し、Windows 2008 Serverで90日以上経過したものを削除するスクリプトを作成しています。私は、次の手順を実行して、近くに来ている:それはあなたのスクリプトがあることをやっていないされて何90日以上経過したログを削除する
find . -mtime +90 -type f -exec rm {} \;
ログを圧縮し、Windows 2008 Serverで90日以上経過したものを削除するスクリプトを作成しています。私は、次の手順を実行して、近くに来ている:それはあなたのスクリプトがあることをやっていないされて何90日以上経過したログを削除する
find . -mtime +90 -type f -exec rm {} \;
:
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日以上経過しているかどうかを確認するテストですが、それを十分簡単に把握できるはずです。
私は、ファイルには次の操作を行って、90日齢であったかどうかを計算する方法を考え出すことができました: #は年齢制限を定義して、秒単位での差を計算 old_files_age = 7776000 のctime = Time.now past_due_logs =(CTIME - old_files_age).to_s.split [0] これらの変数を定義して差異を計算した後、すべてが完全に機能しました。 – Jay
は、ここで再帰的に一致するように、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
に考えるかもしれません)
ようです。 –
@DaveNewtonあなたのご意見は分かりません。 ''独立して作業OSで内部シェル関数を使用していないスクリプトをルビするべきではありませんか?それが彼がスクリプトを書いている理由ですね。 – shime
@shimeシェルスクリプト。 –