Archiv verlassen und diese Seite im Standarddesign anzeigen : Find script zeit auslesen
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
find $ordner -type f \( -name "*.xml" -o -name "*.eps" \) -mmin +60 -exec ls -lc {} \;
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, 14:18
und wenn du das Datum für jede Datei mit ls oder so ausliest?
MfG Peschmä
da gibt's doch aber bestimmt ein paar andere -mXXX Optionen oder?
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, 18: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ä
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";
}
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
OK hat sich erledigt, hab den fehler, die STATUS variable musste unters do *schäm*
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.