Come confrontare i timestamp dei file in bash?


16

Come faccio a confrontare il timestamp di due file?

Ho provato questo ma non funziona:

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

Ho stampato entrambi i timestamp, in ordine e mi dà

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

Quindi, fondamentalmente, se il confronto non funziona, suppongo. O se c'è un altro modo carino di quello che sto facendo, per favore fatemi sapere. Cosa devo cambiare?


1
Il codice richiede spazi attorno alle parentesi quadre.
Jonathan Leffler,

Il meccanismo di test è molto complesso rispetto al meccanismo integrato per il confronto dei timestamp.
Jonathan Leffler,

Risposte:


26

Gli operatori per il confronto dei timestamp sono:

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

Il mnemonico è semplice: "più nuovo di" e "più vecchio di".


5

Ciò è dovuto ad alcuni spazi mancanti. [è un comando, quindi deve avere degli spazi attorno e ]un parametro speciale per dirgli dove finisce la sua linea di comando . Quindi, la tua linea di test dovrebbe apparire come:

if [ $file1time -gt $file2time ];

3
[è un comando di prova - vedere la sezione "EXPRESSIONS CONDIZIONALI" della bashpagina man. C'è anche un eseguibile autonomo in /usr/bin/teste /usr/bin/[, ma se stai usando bash e non stai usando il percorso completo, stai usando l'integrato della shell.
Doug Harris,

@Doug Harris +1 per la spiegazione più completa sull'argomento.
goedson,

1

ifnon è magico. Tenta di eseguire il comando passato ad esso e verifica se ha uno stato di uscita pari a zero. Inoltre non gestisce bene gli argomenti inesistenti, motivo per cui dovresti citare le variabili utilizzate in esso.

if [ "$file1time" -gt "$file2time" ]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.