Como comparar duas datas sem usar Stat?

4

Estou tentando comparar a data da última modificação de um arquivo com a data de hoje. Se a data de modificação for anterior à data de hoje, meu script fará uma coisa, se a data corresponder à data de hoje, eu preciso fazer outra. No momento, meu código é assim:

date2= ls -l file | awk '{print $6 $7}'
date1= date +%b%d

if (( $(printf "%(%s)T" "$date1") > $(printf "%(%s)T" "$date2") ))
then
  echo "date1 is after date2"
else
  echo "date1 is not after date2"
fi

Este código não está funcionando. Alguém tem alguma sugestão?

    
por Cpoole 02.07.2015 / 16:20

4 respostas

3

Se você tiver o GNU find instalado, a linha a seguir retornará o nome do arquivo se ele foi modificado pela última vez antes de hoje

find yourfile -prune -daystart -mtime +0 -print
    
por 02.07.2015 / 16:49
3

Você pode comparar os registros de data e hora do arquivo diretamente em bash/zsh/ksh com o operador de teste -nt ( mais recente que ). Você também pode usar touch para definir uma hora em um arquivo, por exemplo, 0:00 para meia-noite hoje. Então, simplesmente:

touch -d '0:00' /tmp/midnight
if [ file -nt /tmp/midnight ] ...
    
por 02.07.2015 / 19:16
2

Se em um sistema GNU, você pode usar isto:

#!/bin/bash
last_mod="$(date -r "$1" '+%Y%m%d')"
current="$(date '+%Y%m%d')"

if [ "$last_mod" -eq "$current" ]; then
    ## Do something
elif [ "$last_mod" -gt "$current" ]; then
    ## Do something
else
    ## Do something
fi

Insira o nome do arquivo como primeiro argumento para o script.

  • last_mod conterá a data da última modificação do arquivo

  • current conterá a data de hoje

por 02.07.2015 / 16:47
1
if [[ $(date -d$(date +%D) +%s) -gt  $(date +%s -r file.txt) ]]; then
      echo "Not Today" 
      else echo "Today"
fi

Isto irá comparar o tempo decorrido desde a época às 00:00 de hoje e data de modificação desde a época do arquivo.txt.

    
por 02.07.2015 / 16:52

Tags