Como comparar registros de data e hora do arquivo no bash?

16

Como comparo o carimbo de data e hora de dois arquivos?

Eu tentei isso, mas não funciona:

file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
 doSomething
fi

Imprimi ambos os carimbos de hora, em ordem e isso me dá

1273143480
1254144394
./script.sh: line 13: [1273143480: command not found

Então, basicamente, se a comparação não está funcionando, eu acho. Ou, se houver outra maneira legal de fazer o que estou fazendo, entre em contato. O que eu tenho que mudar?

newcoderintown
fonte
1
Seu código precisa de espaços entre colchetes.
Jonathan Leffler
O mecanismo de teste é muito complexo em comparação com o mecanismo embutido para comparar registros de data e hora.
Jonathan Leffler

Respostas:

26

Os operadores para comparar registros de data e hora são:

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

O mnemônico é fácil: 'mais novo que' e 'mais velho que'.

Jonathan Leffler
fonte
5

Isso ocorre devido a alguns espaços ausentes. [é um comando, portanto, deve haver espaços ao seu redor e ]é um parâmetro especial para informar onde sua linha de comando termina. Portanto, sua linha de teste deve se parecer com:

if [ $file1time -gt $file2time ];
goedson
fonte
3
[é um comando de teste - consulte a seção "EXPRESSÕES CONDICIONAIS" da bashpágina de manual. Também há um executável independente no /usr/bin/teste /usr/bin/[, mas se você estiver usando o bash e não o caminho completo, estará usando o shell interno.
Doug Harris
@ Doug Harris +1 para obter uma explicação mais completa sobre o tópico.
goedson
1

ifnão é mágico. Ele tenta executar o comando passado para ele e verifica se o status de saída é zero. Ele também não lida bem com argumentos inexistentes, e é por isso que você deve citar variáveis ​​que estão sendo usadas nele.

if [ "$file1time" -gt "$file2time" ]
Ignacio Vazquez-Abrams
fonte
0
if ( [ $file1time -gt $file2time ] );
then
 doSomething
fi                                                                    
user328064
fonte