¿Cómo comparar marcas de tiempo de archivo en bash?

17

¿Cómo comparo la marca de tiempo de dos archivos?

Intenté esto pero no funciona:

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

Imprimí las dos marcas de tiempo, en orden y me da

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

Básicamente, si la comparación no funciona, supongo. O si hay alguna otra forma agradable de lo que estoy haciendo, hágamelo saber. ¿Qué tengo que cambiar?

Newcoderintown
fuente
1
Su código necesita espacios alrededor de los corchetes.
Jonathan Leffler
El mecanismo de prueba es muy complejo en comparación con el mecanismo incorporado para comparar marcas de tiempo.
Jonathan Leffler

Respuestas:

26

Los operadores para comparar marcas de tiempo son:

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

Lo mnemotécnico es fácil: 'más nuevo que' y 'más viejo que'.

Jonathan Leffler
fuente
5

Esto se debe a algunos espacios faltantes. [es un comando, por lo que debe tener espacios a su alrededor y ]es un parámetro especial para indicarle dónde termina su línea de comando. Entonces, su línea de prueba debería verse así:

if [ $file1time -gt $file2time ];
Goedson
fuente
3
[es un comando de prueba: consulte la sección "EXPRESIONES CONDICIONALES" de la bashpágina del manual. También hay un ejecutable independiente en /usr/bin/testy /usr/bin/[, pero si estás usando bash y no estás usando la ruta completa, estás usando el shell incorporado.
Doug Harris
@Doug Harris +1 para obtener una explicación más completa sobre el tema.
Goedson
1

ifNo es magia. Intenta ejecutar el comando que se le pasa y comprueba si tiene un estado de salida cero. Tampoco maneja bien los argumentos inexistentes, por lo que debe citar las variables que se utilizan en él.

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