Avatar billede shjdsi Nybegynder
18. december 2002 - 13:57 Der er 2 kommentarer og
1 løsning

shell script, standard ksh eller sh eller csh

hej!
Jeg vil gerne lave en shell script der kan se om en fil er mere eller mindre end 1 time gammel.
Jeg har fået lavet et alternativt med
ls -l filanvn
og brugt awk sed og alt muligt andet skrammel, men det betyder at jeg er nød til at lægge en masse check ind vedr. over midnat og datoer m.m


Kunne man evt. anvende find. på en eller anden måde

hvis nu find kunne søge efter en fil der hedder timestamp og er 60 min eller mere gammel. og retunere 0 hvis den findes.

Eller er det en anden indfalds vinkel jeg skal have.

PS. jeg vil lave det i shell script da det er en del af et større script. Så forslag vedr. "bare anvende perl eller php" er jeg ikke interesseret i "denne gang!"

hilsen SHj
Avatar billede bollox Nybegynder
21. december 2002 - 20:31 #1
Følgende script tager et filnavn som argument og finder ud af om filen er yngre/ældre end 1 time. Den skaber en fil der er en 1 time gammel og bruger som du selv foreslog find til at checke input filens alder.
Kønt er det egentlig ikke, men det lader til at funke ...

#!/bin/sh

markerFile=/tmp/__mf.tmp

############################################################################
mkMarker()             # Creates the marker file
############################################################################
{
  now=`date +"%s%z"`
  time=`echo $now | awk -F+ '{print $1}'`         # The time
  TZ=`echo  $now | awk -F+ '{print $2}' | cut -c1-2`     # The timezone
  TZ_offset=`expr 3600 \* $TZ`             #  - in secs

  oneHourAgo=`expr $time + $TZ_offset`         # Compensate for TZ
  oneHourAgo=`expr $oneHourAgo - 3600`         # Compensate for 1h
  oneHourAgo=`date -d '1970-01-01 '$oneHourAgo' sec' +"%y%m%d%H%M.%S"`

  if [ -f $markerFile ]; then rm $markerFile ; fi
  touch -t $oneHourAgo $markerFile
}


# Start the show
if [ -n "$1" ] && [ -f $1 ]; then              # Check the input
  mkMarker
  dir=`dirname $1`
  file=`basename $1`
  hits=`find $1 -cnewer $markerFile | wc -l | sed 's/[     ]//g'`
  if [ 0 -eq $hits ]; then
      echo "Pfew, $1 is old hat"
  else
      echo "Yepper $1 saw life less than 1 hour ago"
  fi
  rm $markerFile
else
  echo "Input error"
fi
Avatar billede skiduck Nybegynder
09. januar 2003 - 12:25 #2
Er det et script der skal køres på forlangende eller er det scheduleret?
Avatar billede shjdsi Nybegynder
09. januar 2003 - 12:32 #3
Faktisk er det et script der skal køre som en daemon,
while : do
bla bla
sleep 300
done

Mange tak for hjælpen, jeg løste det i perl, men kan sagtens bruge dette til en anden gang.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester