Frage Wie überprüfe ich in bash, ob eine Datei vor mehr als einer Zeit erstellt wurde?


Ich möchte in Linux Bash einchecken, ob eine Datei vor mehr als einer Zeit erstellt wurde.

Nehmen wir an, die Datei heißt text.txt und die Zeit beträgt 2 Stunden.

 if [ what? ]
 then
     echo "old enough"
 fi

76
2018-02-16 09:25


Ursprung


Antworten:


Nur für die Modifikationszeit

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

Oder das gleiche in einer Zeile:

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

Sie können verwenden -cmin für Änderung oder -amin für die Zugriffszeit. Wie andere gezeigt haben, glaube ich nicht, dass Sie die Erstellungszeit verfolgen können.


103
2018-02-16 09:36



Ich habe es immer gern benutzt date -r /the/file +%s um sein Alter zu finden.

Sie können auch tun touch --date '2015-10-10 9:55' /tmp/file um extrem feinkörnige Zeit zu einem beliebigen Zeitpunkt zu erhalten.


33
2018-03-08 00:46



Die Erstellungszeit wird nicht gespeichert.

Was gespeichert wird, sind drei Zeitstempel (im Allgemeinen können sie bei bestimmten Dateisystemen oder bestimmten Dateisystemoptionen deaktiviert werden):

  • Letzte Zugriffszeit
  • Letzte Änderungszeit
  • Letzte Änderungszeit

Ein "Ändern" in die Datei wird gezählt, wenn sich die Berechtigung ändert, umbenannt usw. Während die Änderung nur Inhalt ist.


16
2018-02-16 09:33



Verwendung der stat um das letzte Änderungsdatum der Datei herauszufinden, date Um die aktuelle Zeit und eine liberale Verwendung von Bashismen herauszufinden, kann man den gewünschten Test basierend auf der letzten Modifikationszeit der Datei durchführen1.

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

Während der Code ein wenig weniger lesbar ist als die find Ansatz, ich denke, es ist ein besserer Ansatz als zu laufen find um eine Datei zu sehen, die Sie bereits "gefunden" haben. Auch Terminmanipulation macht Spaß ;-)


  1. Wie Phil richtig bemerkte, wird die Erstellungszeit nicht aufgezeichnet, sondern verwendet %Z Anstatt von %Y unten, um "Zeit ändern" zu bekommen, was vielleicht das ist, was Sie wollen.

[Aktualisieren]

Für Mac-Benutzer verwenden stat -f "%m" $somefile anstelle der Linux-spezifischen Syntax oben


12
2017-09-09 19:18



Obwohl ctime nicht ist technisch Die Zeit der Schöpfung ist es 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 Besitzrechte ändern ... aber im Allgemeinen ist das etwas, das einmal gemacht wird, normalerweise zur selben Zeit, zu der Sie die Datei dort ablegen.

Persönlich benutze ich immer mtime für alles, und ich stelle mir vor das ist was du willst. Aber wie auch immer ... hier ist ein Guss von Guss 'unattraktiver Bash, in einer einfach zu bedienenden Funktion.

#! / bin / bash
Funktionsalter () {
   lokaler Dateiname = $ 1
   local geändert = `stat -c% Y" $ filename "`
   local jetzt = "Datum +% s"
   lokal abgelaufen

   Lassen Sie verstrichen = jetzt-geändert
   echo $ ist abgelaufen
}

Datei = "/"
echo Das Alter von $ file ist $ (Alter "$ file") Sekunden.

11
2018-03-25 10:15



Das Finden ist gut, aber ich denke, dass Sie einen anderen Weg verwenden können, besonders wenn Sie jetzt brauchen, wie viele Sekunden die Datei alt ist

date -d "now - $( stat -c "%Y" $filename ) seconds" +%s

mit GNU-Datum


5
2018-05-06 13:06



Berücksichtigen 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, wenn der Inhalt der Datei war geändert (das Feld "Ändern") oder seine Inode geändert (die "Änderung" Feld).

Beispiele, wenn beide Felder aktualisiert werden:

"Ändern" wird aktualisiert, wenn jemand zusätzliche Informationen verkettet hat das Ende der Datei.

"Änderung" wird aktualisiert, wenn jemand die Berechtigungen über chmod geändert hat.


3
2018-02-16 09:33