Usando ls e stat [closed]

0

Eu escrevi este script, mas a saída não está correta. Ele retorna stat não pode indicar nenhum arquivo ou diretório. O formato do arquivo é Living Room-20180418-0955588134.jpg

Qualquer ajuda será apreciada.

#!/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
    
por Colin Davis 18.04.2018 / 11:40

2 respostas

1

Com o GNU find ou compatível:

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

Ou com 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
    
por 18.04.2018 / 14:37
0

O motivo é porque "stat" não vê o caminho completo "/ volume1 / surveillance / @ Snapshot /". Apenas vê o nome do arquivo. Então você precisa modificar o roteiro.

#!/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
    
por 18.04.2018 / 14:34

Tags