¿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?


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'.


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 ];

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" ]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.