Antworten:
Nur zur Änderungszeit
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Sie können -cmin
für Änderungen oder -amin
für die Zugriffszeit verwenden. Wie andere sagten, glaube ich nicht, dass Sie die Erstellungszeit verfolgen können.
find
nicht Null zurückgegeben wird, wenn keine Übereinstimmungen gefunden werden.
text.txt
wird davon ausgegangen, dass es sich nicht um ein Verzeichnis handelt.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Ich habe es immer gemocht date -r /the/file +%s
, sein Alter zu finden.
Sie können auch touch --date '2015-10-10 9:55' /tmp/file
eine extrem feinkörnige Zeit an einem beliebigen Datum / einer beliebigen Uhrzeit ermitteln.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
die, wenn nicht veraltet , mindestens alt und weniger tragbar ist und $(( ))
stattdessen verwendet werden sollte; und Backquotes sind zerbrechlicher als $( )
; Außerdem können Bindestriche in Funktionsnamen möglicherweise nicht vollständig portierbar sein. Das Wesentliche ist jedoch gut!
Mit dem stat
, um das letzte Änderungsdatum der Datei date
herauszufinden, um die aktuelle Zeit und eine großzügige Verwendung von Bashismen herauszufinden, können Sie den gewünschten Test basierend auf der letzten Änderungszeit der Datei durchführen 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Der Code ist zwar etwas weniger lesbar als der find
Ansatz, aber ich denke, er ist besser als das Ausführen find
einer Datei, die Sie bereits "gefunden" haben. Auch Datumsmanipulation macht Spaß ;-)
%Z
anstelle von %Y
unten verwendet, um die "Änderungszeit" zu erhalten, die möglicherweise Ihren Wünschen entspricht.[Aktualisieren]
Verwenden Sie für Mac-Benutzer stat -f "%m" $somefile
anstelle der oben angegebenen Linux-spezifischen Syntax
stat
ist nicht eingebaut - sehr schlecht von mir, werde ich reparieren.
Die Erstellungszeit wird nicht gespeichert.
Was gespeichert werden, sind drei Zeitstempel (im Allgemeinen können sie auf bestimmten Dateisystemen oder durch bestimmte Dateisystemoptionen deaktiviert werden):
Eine "Änderung" der Datei wird als Berechtigungsänderung, Umbenennung usw. gezählt, während die Änderung nur Inhalt ist.
Obwohl ctime technisch gesehen nicht die Zeit der Erstellung ist, ist es dies ziemlich oft.
Da ctime nicht von Änderungen am Inhalt der Datei betroffen ist, wird es normalerweise nur aktualisiert, wenn die Datei erstellt wird. Und ja - ich kann Sie alle schreien hören - es wird auch aktualisiert, wenn Sie die Zugriffsberechtigungen oder den Besitz ändern ... aber im Allgemeinen geschieht dies einmal, normalerweise zur gleichen Zeit, zu der Sie die Datei dort ablegen.
Persönlich benutze ich mtime immer für alles und ich stelle mir vor, dass Sie das wollen. Aber trotzdem ... hier ist eine Wiederholung von Guss '"unattraktivem" Bash in einer einfach zu bedienenden Funktion.
#! / bin / bash Funktion age () { lokaler Dateiname = $ 1 lokal geändert = `stat -c% Y" $ Dateiname "` lokal jetzt = `Datum +% s` lokal verstrichen verstrichen lassen = jetzt geändert Echo $ verstrichen }} file = "/" echo Das Alter von $ file beträgt $ (Alter "$ file") Sekunden.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
, auf die Datei angewendetes Element diese Idee zunichte macht. Aber ich kann damit leben , dass du das tust ;-)
+%s
aus der zweiten Hälfte
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(Danke an @Grizly für die Korrektur!)
noatime
Option bereitgestellten Dateisysteme ist (was für die Leistung gut ist, daher sollten Sie sie verwenden). Also einfach %X
anstelle von verwenden %Y
.
Das Finden ist gut, aber ich denke, Sie können es auch anders verwenden, besonders wenn Sie jetzt wissen müssen, wie viele Sekunden die Datei alt ist
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
mit GNU Datum
Betrachten Sie das Ergebnis des Tools 'stat':
File: `infolog.txt'
Size: 694 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 11635578 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800
Sie können hier die drei Daten für Zugriff / Ändern / Ändern sehen. Es gibt kein Erstellungsdatum. Sie können nur wirklich sicher sein, wann der Dateiinhalt geändert wurde (das Feld "Ändern") oder der Inode geändert wurde (das Feld "Ändern").
Beispiele dafür, wann beide Felder aktualisiert werden:
"Ändern" wird aktualisiert, wenn jemand zusätzliche Informationen an das Ende der Datei angekettet hat.
"Ändern" wird aktualisiert, wenn jemand die Berechtigungen über chmod geändert hat.