11 Stimmen

wie man mit einem Shell-Skript die letzte Änderungszeit einer Datei überprüft

Ich möchte herausfinden, ob bestimmte Dateien innerhalb der letzten drei Minuten geändert wurden, um zu entscheiden, ob die cp erfolgreich war, und wenn ich exit oder setzen Sie das Skript fort. Wie kann ich das tun?

Danke

26voto

tsg Punkte 1977

Sie können die letzte Änderungszeit einer Datei mit stat und das aktuelle Datum mit date . Sie können Format-Strings für beide verwenden, um sie in "Sekunden seit der Epoche" zu erhalten:

current=`date +%s`
last_modified=`stat -c "%Y" $file`

Dann ist es ziemlich einfach, das in eine Bedingung einzubauen. Zum Beispiel:

if [ $(($current-$last_modified)) -gt 180 ]; then 
     echo "old"; 
else 
     echo "new"; 
fi

5voto

Cascabel Punkte 449595

Die Syntax dieser if-Anweisung hängt von Ihrer jeweiligen Shell ab, die Datumsbefehle jedoch nicht. Ich verwende Bash; ändern Sie sie nach Bedarf.

if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
    # was modified in last three minutes
else
    # was not modified in last three minutes
fi

El +%s weist date an, eine UNIX-Zeit auszugeben (wichtig ist, dass es sich um eine ganze Zahl in Sekunden handelt). Sie können auch stat verwenden, um diese Informationen zu erhalten - der Befehl stat -c %Y <file> ist gleichwertig. Achten Sie darauf, dass Sie %Y no %y so dass Sie eine verwertbare Zeit in Sekunden erhalten.

3voto

Glen Punkte 20940

Der stat-Befehl gibt Ihnen den Zeitpunkt der letzten Änderung an

stat -c %y <filename>

3voto

Steve Zobell Punkte 816

Find kann den Dateinamen ausgeben, wenn er in den letzten 3 Minuten geändert wurde.

find file1 -maxdepth 0 -mmin -3

0voto

nik Punkte 12812

Eine Änderung des Datei-Zeitstempels bedeutet nicht unbedingt, dass Sie erfolgreich kopiert haben.
Wenn die Datei beschädigt wird oder der Speicherplatz im Dateisystem erschöpft ist,
werden Sie wahrscheinlich immer noch eine Zeitstempeländerung sehen (das müssen Sie bestätigen).

Ich verstehe den genauen Kontext Ihrer Anforderung nicht.
Wenn Sie eine cp wird es abgeschlossen und kehrt zurück - es kehrt nicht zurück, während es arbeitet.
Ist also die Rückgabe (mit Erfolgs-Exit-Code) nicht ein guter Indikator für den Erfolg?

Wie und warum würden Sie teilweise innerhalb einer cp Betrieb?
Oder ist das eine Charge cp Skript, das die Liste der Dateien in einer Schleife abarbeitet...
etwas mehr Ausarbeitung wäre hilfreich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X