Beim Testen auf diesem Linux-System. Die übliche Methode zum Testen der Dateizeiten ist die Shell:
[ file1 -nt file2 ] && echo "yes"
Scheint mit Sekunden zu arbeiten. Dadurch, dass die Dateien mit einem Zeitunterschied von weniger als einer Sekunde berührt werden, wird dieser Unterschied nicht erkannt:
$ touch file2; sleep 0.1; touch file1; [ file1 -nt file2 ] && echo "yes"
So bestätigen Sie das Problem (Zeit nach dem Punkt ist Nanosekunden):
$ ls --time-style=full-iso -l file?
-rw-r--r-- 1 user user 0 2017-06-23 01:37:01.707387495 -0400 file1
-rw-r--r-- 1 user user 0 2017-06-23 01:37:01.599392538 -0400 file2
Das file1
ist (etwas) neuer als file2
.
Das Problem besteht nun darin, den Zeitwert korrekt zu verarbeiten.
Eine Lösung besteht darin, eine formatierte Ausgabe von ls zu verwenden:
$ ls --time-style=+%s.%N -l file?
-rw-r--r-- 1 user user 0 1498196221.707387495 file1
-rw-r--r-- 1 user user 0 1498196221.599392538 file2
Extrahieren der Zeit auf zwei Variablen (ohne Punkt):
$ file1time=$(ls --time-style=+%s%N -l file1 | awk "{print(\$6)}")
$ file2time=$(ls --time-style=+%s%N -l file2 | awk "{print(\$6)}")
Und vergleichen Sie die Zeiten (Zeiten mit Nanosekunden passen kaum in einen 64-Bit-Wert. Wenn Ihr System kein 64-Bit verwendet, schlägt dieser Vergleich fehl):
$ [ $file1time -gt $file2time ] && echo "yes"
yes
Das zeigt, dass file1
das neuer ist alsfile2
Wenn ls
das erforderliche Format nicht vorhanden ist, können Sie stat ausprobieren.
$ stat file1
File: file1
Size: 0 Blocks: 0 IO Block: 4096 regular file
Device: 805h/2053d Inode: 9180838 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2017-06-23 01:37:01.707387495 -0400
Modify: 2017-06-23 01:37:01.707387495 -0400
Change: 2017-06-23 01:37:01.707387495 -0400
Birth: -
Wenn die Ausgabe Nanosekunden anzeigt, benötigen wir das Datum, um die Uhrzeit zu analysieren (und zu formatieren).
$ stat --printf='%y\n' file1
2017-06-23 01:37:01.707387495 -0400
$ date +'%s%N' -d "$(stat --printf='%y\n' file1)"
1498196221707387495
Der Rest ist der gleiche. Ordnen Sie die Ergebnisse von Datei1 und Datei2 zwei Variablen zu und vergleichen Sie sie numerisch.