stat
kann Ihnen diese Informationen geben:
filemtime=$(stat -c %Y myfile.txt)
%Y
gibt Ihnen die letzte Änderung als "Sekunden seit The Epoch", aber es gibt viele andere Optionen; Mehr Info. Wenn die Datei also am 22.01.2011 um 15:30 Uhr GMT geändert wurde, würde das Obige eine Zahl im Bereich von 1295710237 zurückgeben.
Bearbeiten :Ah, Sie wollen die Zeit in Tagen seit der Änderung. Das wird komplizierter, nicht zuletzt, weil ein "Tag" kein fester Zeitraum ist (einige "Tage" haben nur 23 Stunden, andere 25 – dank Sommerzeit).
Die Naiven Version könnte so aussehen:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...aber noch einmal, das setzt voraus, dass ein Tag immer genau 86.400 Sekunden lang ist.
Mehr über Arithmetik in bash hier.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
setzt $AGE auf das Alter von $file in Tagen, als Perls -M
Operator verarbeitet den stat
Anruf und die Umrechnung in Tage für Sie.
Der Rückgabewert ist ein Fließkommawert (z. B. 6,62849537 Tage). Fügen Sie eine int
hinzu zum Ausdruck, wenn Sie ein Integer-Ergebnis benötigen
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby und Python haben auch ihre Einzeiler, um eine Datei zu statisieren und einige Daten zurückzugeben, aber ich glaube, Perl hat den kürzesten Weg.
Das Datumsdienstprogramm hat einen bequemen Schalter zum Extrahieren der mtime aus einer Datei, die Sie dann mithilfe einer Formatzeichenfolge anzeigen oder speichern können.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Siehe man date
, wird die Ausgabe von date durch einen mit "+"
beginnenden Formatstring gesteuert
Nützliche Formatzeichenfolgen zum Vergleichen vieler Datumsangaben könnten sein:
"+%j": day of year
"+%s": unix epoch time
Arithmetik mit Datumsangaben ist ein bisschen mühsam in Bash, wenn Sie also eine relative Zeit brauchen, die in allen Eckfällen funktioniert, sind Sie vielleicht mit einer anderen Sprache besser dran.