Precisão do teste -newer

0

Parece que o teste -newer não é tão preciso quanto eu gostaria. Usando ls -lt , obtenho a ordem de classificação correta:

-rw-r--r--@ 1 p  staff      48 Jan 26 14:42 foo.gdb
-rw-r--r--@ 1 p  staff  328971 Jan 26 14:42 foo.pdf
-rw-r--r--@ 1 p  staff    3133 Dec 14 05:52 foo.tex

Mas o uso dos rendimentos do teste -newer :

../isNewer.sh foo.gdb foo.pdf
File 1 is older than file 2

../isNewer.sh foo.pdf foo.gdb
File 1 is older than file 2

em que ../isNewer.sh é

#!/bin/bash

if [ $1 -nt $2 ]; then
  echo "File 1 is newer than file 2"
else
  echo "File 1 is older than file 2"
fi

Saída de stat :

Conforme solicitado nos comentários, a saída de stat foo.pdf foo.gdb (com espaços adicionados manualmente para readability) é:

16777217 255313605 -rw-r--r-- 1 p staff 0 328971 "Jan 26 21:28:06 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 648 0 foo.pdf
16777217 255313604 -rw-r--r-- 1 p staff 0 48     "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 8   0 foo.gdb

Perguntas:

  • Qual é a precisão do -newer test & gt ;?
  • Existe uma alternativa que fará um teste mais preciso para um arquivo ser mais novo que outro (um que pode ser comparado ao segundo em vez do minuto)?

Plataforma:

  • MacOS com o bash 3.2.53 (1) -release
por Peter Grill 27.01.2017 / 06:39

1 resposta

2

O operador -nt usará a hora da última modificação ao comparar a idade dos dois arquivos.

De acordo com a saída stat , os dois arquivos neste exemplo têm o exato mesmo tempo de modificação (até o segundo), Jan 26 14:42:16 2017 (o segundo registro de data e hora na saída stat ).

Portanto, um arquivo não é "mais novo" que o outro, e o teste retorna falso, independentemente da ordem em que o teste foi realizado.

    
por 27.01.2017 / 11:29