2010-10-12 8 views
1

Je veux savoir les fichiers qui sont plus anciens que x jours (heure et week-ends ne comptent pas dans le but de calculer un âge du fichier). Je dois utiliser seulement les jours de la semaine.plage basée sur la date quand pas dans un mois ne fonctionne pas (ruby)

Mon script fonctionne mais uniquement si la date de la plage est dans le même mois. Sinon, la taille de la plage est 0.

je lance le script via Ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

Dir['*.gdb'].each { |db| 
    puts db 
    puts ((Date.strptime(File.mtime(db).strftime("%Y-%m-%d")))..(Date.today)).select {|d| (1..5).include?(d.wday) }.size 

} 

une idée comment je peux le faire fonctionner?

+0

Si les jours fériés comptés? –

+0

@Lars Haugseth: ce n'est pas grave dans ce cas – Radek

+0

pas sûr de ce qui s'est passé mais 'puts ((Date.strptime (File.mtime (db) .strftime ("% Y-% m-% d "))). . (Date.today)). Sélectionnez {| d | (1..5) .include? (D.wday)} .size' fonctionne bien maintenant – Radek

Répondre

0

de sorte que le code final qui supprime tous les fichiers de

  • paramètres [ 'chemin ']
  • qui sont plus anciens que les paramètres [' jours '] - les jours de week-end ne sont pas c ounted
  • et ne sont pas dans les paramètres [ 'exclude'] tableau

-

require 'date' 

    settings = { 
    'radek' => { 'path' => '/var/lib/firebird/data/radek*.gdb','days' => '3','exclude'=>['radek_rft.gdb','radek_tmp.gdb','radek_test.gdb','radek_cmapping.gdb'] } 
    } 

    settings.each_value { |user| 
    user['exclude'].collect! {|file| file.downcase } 
    Dir[user['path']].each { |db| 
     old = ((Date.strptime(File.mtime(db).strftime("%Y-%m-%d")))..(Date.today)).select {|d| (1..5).include?(d.wday) }.size - 1 
     if (old.to_i >= user['days'].to_i) and not(user['exclude'].include?(File.basename(db))) then output= %x[rm #{db}] end 
    } 
    } 
1

Pour trouver les fichiers de plus de X jours par exemple 7 jours

x=7 
t=Time.now 
days=t - (x * 86400) 
Dir["*.gdb"].each do |db| 
    if File.mtime(db) < days 
    puts db 
    end 
end 

Pour exclure le week-end

t=Time.now # get current date 
days=t - (7 * 86400) # get date 7 days before 
Dir["*.gdb"].each do |db| 
    wd=File.mtime(db).wday # get the wday of file. 1 (monday), ... 5 (friday) 
    if File.mtime(db) < days and wd.between?(1,5) 
    # File.mtime(db) < days means get files older than 7 days 
    # at the same time check the wday of the file whether they are in 1..5 range 
    # using wd.between?(1,5) 
    puts db 
    end 
end 
+0

@ ghostdog74: votre code exclut-il les week-ends? – Radek

+0

no. ce ne est pas. mais vous pouvez ajouter une vérification.voir modifier – ghostdog74

+0

cool. Je vais essayer ça. Une idée de pourquoi mon code ne fonctionne pas? – Radek

Questions connexes