Chci zjistit stáří nejstaršího souboru v určitém adresáři nebo vrátit 0, pokud v tomto adresáři nejsou žádné soubory. Potřebuji k tomu také jednořádkový příkaz. Zatím toto je můj příkaz pro zjištění stáří nejstaršího souboru v adresáři v sekundách:
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
Problém je, že pokud nejsou žádné soubory, vrací následující chybu:
$ 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 "- ")
Takže v tomto případě chci, aby příkaz vrátil pouze 0 a potlačil chybový výpis.
Přijatá odpověď:
Pokud to musí být jeden řádek:
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
vytisknout časové razítko všech souborů, ignorovat chyby (takže žádný soubor nevede k žádnému výstupu)-
S awk:
-v d="$(date +%s)"
uložit aktuální časové razítko do proměnnéd
BEGIN {m=d}
inicializovatm
dod
$0 < m {m = $0}
sledování minima vm
END {print d - m}
vytisknout rozdíl.