Como comparar os timestamps de arquivos no bash?

17

Como eu comparo o timestamp 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

Eu imprimi os dois carimbos de tempo, em ordem e isso me dá

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

Então, basicamente, se comparação não está funcionando, eu acho. Ou se houver alguma outra maneira legal do que o que estou fazendo, por favor me avise. O que tenho que mudar?

    
por newcoderintown 06.05.2010 / 12:53

4 respostas

26

Os operadores para comparar os carimbos de tempo são:

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

O mnemônico é fácil: 'mais recente que' e 'mais antigo que'.

    
por 06.05.2010 / 17:02
5

Isso é devido a alguns espaços ausentes. [ é um comando, por isso deve ter espaços ao redor dele e o ] é um parâmetro especial para informar onde a linha de comando termina. Então, sua linha de teste deve se parecer com:

if [ $file1time -gt $file2time ];
    
por 06.05.2010 / 13:05
1

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

if [ "$file1time" -gt "$file2time" ]
    
por 06.05.2010 / 13:05
0
if ( [ $file1time -gt $file2time ] );
then
 doSomething
fi                                                                    
    
por 30.05.2014 / 20:06