PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Find script zeit auslesen



suetter
21-11-2003, 08:08
Hallo,
ich bräuchte mal eure hilfe bei einem find script, das script soll alle Dateien finden die mit .xml und .eps enden, und soll mir dann alle die älter als 1ne std. sind anzeigen!

den such befehl hab ich bereits,nur wie ich dass mit der einen std. machen soll, da hab ich keine idee für:

find $ordner -type -f | grep -v .rsrc | grep -v OMT.XML | grep -v test | xargs ls -lc

fork
21-11-2003, 12:01
find $ordner -type f \( -name "*.xml" -o -name "*.eps" \) -mmin +60 -exec ls -lc {} \;

suetter
25-11-2003, 12:15
Geht net, sorry hab eine angabe vergessen, das Script soll unter Solaris 9 laufen, die option -mmin gibt es unter sol. leider nicht

peschmae
25-11-2003, 13:18
und wenn du das Datum für jede Datei mit ls oder so ausliest?

MfG Peschmä

fork
25-11-2003, 17:03
da gibt's doch aber bestimmt ein paar andere -mXXX Optionen oder?

suetter
25-11-2003, 17:09
Ja, mminfo z.B. , aber die bringen auch nicht allzufiel. Ich hab es schon probiert mit xargs ls -lc und dann mit awk die Zeile mit dem Datum zu nehemen, funzt aber net, da auch dateien von 2002 dabeisind und diese nur mit der Jahreszahl und nicht mit dem Erstelldatum angegeben werden

peschmae
25-11-2003, 17:46
und wenn du date brauchst?
Für jede Datei checken:
date +%k
minus
date -r datei +%k

und dann mit test checken ob die Differenz > 0 ist.

MfG Peschmä

fork
25-11-2003, 18:26
find2perl $ordner -type f \( -name "*.xml" -o -name "*.eps" \) -type f Obiges schmeisst schon mal den Perl-Code ohne die Zeiteingrenzung raus, etwas angepasst sieht das dann so aus:
#! /usr/bin/perl -w
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell

use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;


# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/DEIN/SUCH/PFAD');
exit;


sub wanted {
my ($seconds);

($seconds = (stat($_))[9])
&& -f _
&& (
/^.*\.xml\z/s
|| /^.*\.eps\z/s
)
&& -f _
&& ( $seconds < (time - (60 * 60)) )
&& print "$File::Find::name\n";
}

suetter
27-11-2003, 11:42
Sorry, aber mit perl weis ich net allzuviel anzufangen, aber trotzdem danke!So ich hab jetzt ein script, dieses wird alle Stunde von der Crontab ausgeführt, allerdings kommen auch leere e-mails, könnt mir jemand sagen wo hier der fehler liegt??

#/bin/sh

#Variablen
###########

STATUS=ok
MASCHINE=
PROJEKT=
MAILHOST=mailhost
SENDER=
#RECEIVER=
RECEIVER=

# Check each Hotfolder which is configured in ../etc/check_hotfolder.conf
################################################## #######################

uname -a | grep SunOS > /dev/null
if [ $? = 0 ]
then
/usr/ucb/ps -axw > /tmp/check_hotf.ps
else
/bin/ps -axw > /tmp/check_hotf.ps
fi

for i in `cat /usr/local/check_hotfolder/etc/check_hotfolder.conf`
do

HOTFOLDER=`echo $i | awk -F"=" '{ print $1 }'`
HOT_PATH=`echo $i | awk -F"=" '{ print $2 }'`

# Find Script
#######################

if [ -f /tmp/$HOTFOLDER-find.out ]
then
find $HOT_PATH -type f | grep -v .rsrc | grep -v OMT.XML | grep -v test | fgrep -f /tmp/$HOTFOLDER-find.out > /tmp/find.msg.out
find $HOT_PATH -type f | grep -v .rsrc | grep -v OMT.XML | grep -v test > /tmp/$HOTFOLDER-find.out
else
find $HOT_PATH -type f | grep -v .rsrc | grep -v OMT.XML | grep -v test > /tmp/$HOTFOLDER-find.out
continue
fi


# Werden Dateien abgearbeitet?
##############################

if [ -s /tmp/find.msg.out ]
then
STATUS="error"
fi


# Ist der Hotfolder Prozess gestartet?
######################################

grep $HOTFOLDER /tmp/check_hotf.ps > /dev/null

if [ $? != 0 ]
then
STATUS="norun"
fi


if [ $STATUS != "ok" ]
then
echo > /tmp/check_hotf.msg
echo "Datum :" `date` >> /tmp/check_hotf.msg
echo "Projekt : $PROJEKT" >> /tmp/check_hotf.msg
echo "Maschine : $MASCHINE" >> /tmp/check_hotf.msg
echo "Hotfolder: $HOTFOLDER" >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg
echo "Fehler:" >> /tmp/check_hotf.msg
echo "-------" >> /tmp/check_hotf.msg

if [ $STATUS = "error" ]
then
echo "Folgende Dateien wurden in der letzten halben Stunde nicht abgearbeitet:" >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg
echo `cat /tmp/find.msg.out` >> /tmp/check_hotf.msg
fi

if [ $STATUS = "norun" ]
then
echo "Der Hotfolder wurde nicht gestartet!" >> /tmp/check_hotf.msg
fi

echo >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg
echo "--------------------------------------------------------------------------------" >> /tmp/check_hotf.msg
echo "Diese Nachricht wurde durch die DTS Hotfolderueberwachung automatisch generiert." >> /tmp/check_hotf.msg
echo "Die Scripte zur Hotfolderueberwachung liegen auf dem jeweiligen System unter:" >> /tmp/check_hotf.msg
echo "/usr/local/check_hotfolder" >> /tmp/check_hotf.msg
echo "--------------------------------------------------------------------------------" >> /tmp/check_hotf.msg
echo >> /tmp/check_hotf.msg

ant -f /usr/local/check_hotfolder/etc/mail.xml \
-Dmailhost=$MAILHOST \
-Dsender=$SENDER \
-Dreceiver=$RECEIVER \
-Dsubject="[$MASCHINE] [$PROJEKT] Fehler in Hotfolder" \
-Dmessagefile="/tmp/check_hotf.msg"
fi
done

suetter
27-11-2003, 13:12
OK hat sich erledigt, hab den fehler, die STATUS variable musste unters do *schäm*