Modifizierungsdatum zweier Dateien vergleichen
Soll zum Beispiel in einem Shellskript festgestellt werden, welche von zwei Dateien als letzte verändert wurde, so kann man dazu newer(1) verwenden. newer findet man in den FreeBSD-Ports unter misc/newer:
# cd /usr/ports/misc/newer && make install clean
An newer werden als Argumente die beiden Dateinamen übergeben. Ist das Modifizierungsdatum der zweiten Datei neuer als das der ersten, wird von newer der Rückgabewert 1 ausgegeben:
# touch datei1
# touch datei2
# newer datei1 datei2
# echo $?
1
Ist die erste Datei neuer, so wird als Rückgabewert 0 zurückgegeben:
# touch datei1
# newer datei1 datei2
# echo $?
0
Existiert die zweite Datei gar nicht, so wird eine 0 zurückgegeben:
# rm datei2
# newer datei1 datei2
# echo $?
0
Existiert die erste Datei nicht, wird eine 1 zurückgegeben:
# mv datei1 datei2
# newer datei1 datei2
# echo $?
1
Comments
Warum so kompliziert, wenn das auch mit test geht? (zumindest auf MacOS X 10.4.9)
$ touch f1; sleep 2; touch f2
$ test f1 -nt f2; echo $?
1
$ test f1 -ot f2; echo $?
0
-nt True if file1 exists and is newer than file2.
-ot True if file1 exists and is older than file2.
Hallo Hanspeter
Viele Dank für die Info. Wenn allerdings eine von beiden Dateien nicht existiert, gibt mir test in beiden Fällen immer eine 1 zurück. (Zumindest auf FreeBSD 6.2)
# touch f1
# test f1 -nt f2 ; echo $?
1
# test f2 -nt f1 ; echo $?
1
# test f1 -ot f2 ; echo $?
1
# test f2 -ot f1 ; echo $?
1