Ich möchte das Alter der ältesten Datei in einem bestimmten Verzeichnis finden oder 0 zurückgeben, wenn sich in diesem Verzeichnis keine Dateien befinden. Ich brauche auch einen einzeiligen Befehl, der es tut. Bisher ist dies mein Befehl, um das Alter der ältesten Datei im Verzeichnis in Sekunden zu ermitteln:
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
Das Problem ist, dass, wenn keine Dateien vorhanden sind, der folgende Fehler zurückgegeben wird:
$ expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
stat: cannot stat ‘0’: No such file or directory
-bash: 1554373460 - : syntax error: operand expected (error token is "- ")
In diesem Fall möchte ich also, dass der Befehl nur 0 zurückgibt und den Fehlerausdruck unterdrückt.
Akzeptierte Antwort:
Wenn es eine Zeile sein muss:
stat -c %Y ./* 2>/dev/null | awk -v d="$(date +%s)" 'BEGIN {m=d} $0 < m {m = $0} END {print d - m}'
stat -c %Y ./* 2>/dev/null
gibt den Zeitstempel aller Dateien aus und ignoriert Fehler (also keine Dateien führen zu keiner Ausgabe)-
Mit awk:
-v d="$(date +%s)"
Speichern Sie den aktuellen Zeitstempel in einer Variablend
BEGIN {m=d}
m
initialisieren zud
$0 < m {m = $0}
Verfolgen des Minimums inm
END {print d - m}
Differenz drucken.