Hier ist eine Loesungen in Ruby. Das Script kann man entweder mit Ruby auf C oder mit Ruby auf Java ausfuehren.
Wenn man das Script mit Ruby auf Java ausfuehrt, dann erfuellt es die Anforderungen genau, d.h. das Ergebnis wird tatsaechlich in einem Popup ausgegeben, wenn neue Dateien gefunden wurden.
Was ich fuer ziemlich unsinning halte: Standard output reicht voellig aus, und das Popup macht das script weniger flexibel. Wenn man das script nicht mit JRuby sondern mit MRI (C Ruby) ausfuehrt, dann bekommt man kein Popup sondern eine ganz normale Ausgabe auf STDOUT.
Aufruf sieht so aus:
ruby searchandnotify.rb FOLDER DAYS OUTPUT_FILE
wobei FOLDER der name des Ordners ist, in dem sich die Dateien befinden, DAYS ist das Interval in Tagen und OUTPUT_FILE ist der Name der Datei, in die die Ergebnisse geschrieben werden.
Die JRuby Variante startet man ganz genauso, nur eben mit jruby anstatt mit ruby.
Also z.b.
jruby searchandnotify.rb /home/trash/msword 40 ergebnisse.csv
sucht alle Dateien im Ordner /home/trash/msword, mit einem Datum innerhalb der letzten 40 Tage und speichert das Ergebnis in 'ergebnisse.csv' .
#!/usr/env ruby
# (c) Benjamin Ferrari
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
require "date"
date_pattern = "%d.%m.%Y"
folder, interval, outfile = ARGV
#find the dates
dates = []
Dir['#{folder}/**/*'].each do |filename|
if filename =~ /.* (\d\d\.\d\d\.\d{4})\..{3}$/
date = Date.strptime($1, date_pattern)
dates << date if (Date.today - date) < interval.to_i
end
end
unless dates.empty?
list = dates.collect{ |date| date.strftime(date_pattern) }.join("\n")
File.new(outfile,'w').write(list)
# Choose output method, depending if we run on Java or C.
begin
require 'java'
def say message ; javax.swing.JOptionPane.showMessageDialog(nil, message) end
rescue LoadError
def say message ; puts message end
end
say "New files found:\n#{list} "
end
Alles anzeigen