Using ls and stat [closed]
Clash Royale CLAN TAG#URR8PPP
up vote
0
down vote
favorite
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
ls stat
closed as off-topic by Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher Apr 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
add a comment |Â
up vote
0
down vote
favorite
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
ls stat
closed as off-topic by Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher Apr 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
3
You are getting filenames from a different directory than what you runstat
in. Also don't parse the output fromls
.
â Kusalananda
Apr 18 at 9:45
add a comment |Â
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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
ls stat
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
ls stat
edited Apr 18 at 9:53
asked Apr 18 at 9:40
Colin Davis
41
41
closed as off-topic by Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher Apr 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
closed as off-topic by Kusalananda, Stephen Kitt, Jeff Schaller, Timothy Martin, Christopher Apr 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
3
You are getting filenames from a different directory than what you runstat
in. Also don't parse the output fromls
.
â Kusalananda
Apr 18 at 9:45
add a comment |Â
3
You are getting filenames from a different directory than what you runstat
in. Also don't parse the output fromls
.
â Kusalananda
Apr 18 at 9:45
3
3
You are getting filenames from a different directory than what you run
stat
in. Also don't parse the output from ls
.â Kusalananda
Apr 18 at 9:45
You are getting filenames from a different directory than what you run
stat
in. Also don't parse the output from ls
.â Kusalananda
Apr 18 at 9:45
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
1
down vote
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
add a comment |Â
up vote
0
down vote
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 withfind dir -type f -mtime +1
or something similar?
â Kusalananda
Apr 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 at 12:43
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
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
add a comment |Â
up vote
1
down vote
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
add a comment |Â
up vote
1
down vote
up vote
1
down vote
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
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
answered Apr 18 at 12:37
Stéphane Chazelas
279k53514846
279k53514846
add a comment |Â
add a comment |Â
up vote
0
down vote
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 withfind dir -type f -mtime +1
or something similar?
â Kusalananda
Apr 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 at 12:43
add a comment |Â
up vote
0
down vote
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 withfind dir -type f -mtime +1
or something similar?
â Kusalananda
Apr 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 at 12:43
add a comment |Â
up vote
0
down vote
up vote
0
down vote
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
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
answered Apr 18 at 12:34
Buddika
1364
1364
Why not replace the whole script withfind dir -type f -mtime +1
or something similar?
â Kusalananda
Apr 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 at 12:43
add a comment |Â
Why not replace the whole script withfind dir -type f -mtime +1
or something similar?
â Kusalananda
Apr 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 at 12:43
Why not replace the whole script with
find dir -type f -mtime +1
or something similar?â Kusalananda
Apr 18 at 12:37
Why not replace the whole script with
find dir -type f -mtime +1
or something similar?â Kusalananda
Apr 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 at 12:43
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 at 12:43
add a comment |Â
3
You are getting filenames from a different directory than what you run
stat
in. Also don't parse the output fromls
.â Kusalananda
Apr 18 at 9:45