stat
vám může poskytnout tyto informace:
filemtime=$(stat -c %Y myfile.txt)
%Y
dává vám poslední modifikaci jako „sekundy od Epochy“, ale existuje spousta dalších možností; více informací. Pokud byl tedy soubor upraven 22. 1. 2011 v 15:30 GMT, výše uvedené vrátí číslo v oblasti 1295710237.
Upravit :Aha, chcete čas ve dnech od změny. To bude složitější, v neposlední řadě proto, že „den“ není pevné časové období (některé „dny“ mají pouze 23 hodin, jiné 25 – díky letnímu času).
Naivní verze může vypadat takto:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...ale znovu, za předpokladu, že den má vždy přesně 86 400 sekund.
Více o aritmetice v bash zde.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
nastaví $AGE na věk $file ve dnech jako Perl's -M
operátor zpracovává stat
volání a převod na dny pro vás.
Vrácená hodnota je hodnota s plovoucí desetinnou čárkou (např. 6,62849537 dnů). Přidejte int
na výraz, pokud potřebujete mít celočíselný výsledek
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby a Python mají také své jednolinky pro statistiku souboru a vrácení některých dat, ale věřím, že Perl má nejstručnější způsob.
Nástroj pro datum má praktický přepínač pro extrahování mtime ze souboru, který pak můžete zobrazit nebo uložit pomocí formátovacího řetězce.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Viz man date
, výstup data je řízen formátovacím řetězcem začínajícím "+"
Užitečné formátovací řetězce pro porovnání mnoha dat mohou zahrnovat:
"+%j": day of year
"+%s": unix epoch time
Aritmetika s daty je v bash trochu nepříjemná, takže pokud potřebujete relativní čas, který bude fungovat ve všech rohových případech, možná vám bude lépe s jiným jazykem.