GNU/Linux >> Znalost Linux >  >> Linux

Získat mtime konkrétního souboru pomocí Bash?

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.


Linux
  1. Jak získat konkrétní adresu paměti pomocí C

  2. Jak zapsat celé číslo do binárního souboru pomocí Bash?

  3. Jak získám absolutní adresář souboru v bash?

  1. Získejte konkrétní řádek z textového souboru pouze pomocí skriptu Shell

  2. Porovnání dat v Bash

  3. Získejte datum poslední změny souboru v Linuxu

  1. Použití příkazu Linux Basename ve skriptech Bash

  2. najít a zkopírovat soubor pomocí Bash

  3. Použití sed k nahrazení mezi konkrétním vzorem