0

I have written this script, however the output is not correct. It returns stat cannot stat no such file or directory. The file format is Living Room-20180418-0955588134.jpg

Any help will be appreciated.

#!/bin/sh

LASTFILE=$(cd /volume1/surveillance/@Snapshot && ls *.jpg  | tail -1)



# Input file

# How many seconds before file is deemed "older"
OLDTIME=3600
# Get current and file times
CURTIME=$(date +%s)
FILETIME=$(stat "$LASTFILE" -c %Y)
TIMEDIFF=$(expr $CURTIME - $FILETIME)

# Check if file older
if [ $TIMEDIFF -gt $OLDTIME ]; then

echo "No Movement Dectected in Last Hour" ;
   exit 1
fi

closed as off-topic by Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher Apr 18 '18 at 18:54

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions describing a problem that can't be reproduced and seemingly went away on its own (or went away when a typo was fixed) are off-topic as they are unlikely to help future readers." – Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher
If this question can be reworded to fit the rules in the help center, please edit the question.

1

With GNU find or compatible:

if
  ! find /volume1/surveillance/@Snapshot -name '*.jpg' -mmin -60 |
    grep -q '^'
then
  echo No movement detected in the last hour
  exit 1
fi

Or with zsh:

last_hour=(/volume1/surveillance/@Snapshot/*.jpg(Nmh-1))
if (($#last_hour = 0)); then
  echo No movement detected in the last hour
  exit 1
fi
0

The reason is because "stat" doesn't see the full path "/volume1/surveillance/@Snapshot/". It just sees the filename. So you need to modify the script.

#!/bin/sh
DIR=/volume1/surveillance/@Snapshot
LASTFILE=$(cd $DIR && ls *.jpg  | tail -1)

# Input file

# How many seconds before file is deemed "older"
OLDTIME=3600
# Get current and file times
CURTIME=$(date +%s)
FILETIME=$(stat $DIR/$LASTFILE -c %Y)
TIMEDIFF=$(expr $CURTIME - $FILETIME)

# Check if file older
if [ $TIMEDIFF -gt $OLDTIME ]; then

 echo "No Movement Dectected in Last Hour" ;
 exit 1
fi
  • Why not replace the whole script with find dir -type f -mtime +1 or something similar? – Kusalananda Apr 18 '18 at 12:37
  • Yes. your method is the perfect one but the OP wants to get the last file. "LASTFILE=$(cd $DIR && ls *.jpg | tail -1)" – Buddika Apr 18 '18 at 12:43

Not the answer you're looking for? Browse other questions tagged or ask your own question.