Solved

Using UNIX find by time

Posted on 2004-10-10
10
854 Views
Last Modified: 2013-12-05
Hi,

I want to write a UNIX script that checks for any files older then 20mins in
in a unix directory. If it does find a file then an email gets sent notifying the administrator.
If no files are found then it doesn't do anything. Only thing I'm not so sure about writing is the finding of
files which are older then 20mins. I know how to find for files older then 1+ days.

Unix directory = /var/adm/test - check for files here older then 20mins
email = xyz@hotmail.com - email to be sent here

Help would be appreciated in this scripting.

cheers

Bud
0
Comment
Question by:budrito12
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
10 Comments
 
LVL 38

Expert Comment

by:yuzh
ID: 12274525
If you have GNU find installed ( Linux default find), you can do:

see: http:Q_21057774.html

If not, you need to use touch + find, see:
http:Q_21074942.html
0
 

Author Comment

by:budrito12
ID: 12294195
Hi Yuzh,

Thanks for the reply mate but my scripts are after files that are older then 20mins. From what i understand the link http:Q_21074942.html only looks for files newer then the timestamp file. So in otherwords, if the timestamp file time is 14:00 and the current time is 14:20, the script only finds files newer then 14:00. My issue is that there shouldn't be any files older then 15-20 mins in the directory. The script provided in the link will pick up a valid file which may have been created 5min ago and is in the processing stage.

Please advise.

cheers
0
 
LVL 38

Expert Comment

by:yuzh
ID: 12294307
No problems mate!

For files older that 20mins, you can do:

find . -type f !-newer mystamp -print

!-newer = "NOT newer" = OLDER or the same age
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:budrito12
ID: 12294770
Hi Yuzh,

I'm on TRU64 so it doesn't like the "!-newer" command. Actually your find command errors with the following:

"find: missing conjunction"

So, I removed the -type f (find . !-newer mystamp -print)
This errors with:
find: bad option !-newer

cheers

0
 
LVL 38

Accepted Solution

by:
yuzh earned 50 total points
ID: 12295205
Sorry, you need to have SPACE between ! and -newer!

try:

find . -type f  ! -newer mystamp -print
0
 

Author Comment

by:budrito12
ID: 12295246
Yuzh, you're a legend mate. thanks script now works brilliantly. I'II allocate you the points and once again thanks for your help.

cheers
0
 
LVL 38

Expert Comment

by:yuzh
ID: 12295534
You are welcome!

Cheers!
0
 

Author Comment

by:budrito12
ID: 12304682
Hi Yuzh,

One slight problem detected mate. When running the script from command line it runs fine but when scheduled in background I get the following error. I've attached the script as well:

SCRIPT:
#!/bin/ksh

mailgroup=xyz@hotmail.com
LOGFILE=/tmp/logfile

#GET AND PARSE THE CURRENT DATE
date "+%m %d %H %M" | while read MONTH DAY HOURS MINS
 do

#SUBTRACT 20 MIN
  MINS=$(($MINS-20))

  if [ $MINS -lt 0 ]
   then
    HOURS=$(($HOURS-1))
    MINS=$(($MINS+60))
  fi

#TOUCH A FILE SO THAT IT IS 20 MINUTES OLD
  touch -t ${MONTH}${DAY}${HOURS}${MINS} /tmp/timestamp
 done

#Find files older then 20mins condition
find / ! -newer /tmp/timestamp | while read FILENAME
 do
  #CHECK THAT IT IS A REGULAR FILE, AND NOT A DIR OR
  #  CHARACTER FILE, BEFORE RUNNING THE COMMAND AGAINST IT
  if [ -f $FILENAME ]
   then
    echo "$FILENAME" >$LOGFILE
    mailx -s "Files have been detected older then 20mins for SIPS in the PROC directory" <$LOGFILE $mailgroup 2>&1
  fi
 done

The error I get when running from crontab is:
syntax error at line 19: `MIN=$' unexpected
syntax error at line 24: `HOURS=$' unexpected

Any ideas matey.

cheers
Bud
0
 
LVL 38

Expert Comment

by:yuzh
ID: 12304972
If you run the script as a cron job, the problem is ENV settings, you can use full path
for all the commands, eg:

/bin/date instead of date

or run the script to use a user's login ENV, eg, you login as fred, and fred can run the
script in commandline.

in your crontab, you do:

/bin/su - fred -c "/path-to/yourscript"

man su
to learn more details.

0
 

Author Comment

by:budrito12
ID: 12376663
Thanks YUZH, that problem has been solved but another developed. Looking at my script above, if the directory contains 300 files older then 20mins it sends out 300 emails. I onyl want it to send the one single email containing all the 300 file names.

cheers
Bud.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Shell Script on AIX 7 178
awk sed 8 136
Windows 8.1 HP issues 11 98
Oracle DB Slows After Datapump Until Next Reboot 27 173
Why Shell Scripting? Shell scripting is a powerful method of accessing UNIX systems and it is very flexible. Shell scripts are required when we want to execute a sequence of commands in Unix flavored operating systems. “Shell” is the command line i…
In a recent article here at Experts Exchange (http://www.experts-exchange.com/articles/18880/PaperPort-14-in-Windows-10-A-First-Look.html), I discussed my nine-month sandbox testing of the Windows 10 Technical Preview, specifically with respect to r…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.
Suggested Courses

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question