Příkaz `date` je základním nástrojem v prostředí Bash, které je standardním rozhraním pro většinu distribucí Linuxu a také pro macOS. Tento článek vám ukáže, jak efektivně pracovat s datem a časem v příkazovém řádku a jak ho můžete využít ve skriptech, abyste dosáhli mnohem více než jen zobrazení aktuálního času.
Chcete-li si zobrazit aktuální datum a čas, stačí zadat příkaz `date`. Terminál vám vypíše aktuální datum a čas ve vašem časovém pásmu:
date
Výchozí formátování nemusí každému vyhovovat. Proč je rok zobrazen až na konci, a ne za měsícem a dnem? Nebojte se, příkaz `date` nabízí rozsáhlé možnosti přizpůsobení výstupu. Máte k dispozici více než 40 voleb, pomocí kterých můžete výstup formátovat přesně podle vašich představ.
Pro použití voleb zadejte `date`, mezeru, znaménko plus `+` a následně požadovanou volbu, která začíná znakem procenta `%`. Například volba `%c` (datum a čas ve formátu dle vašeho národního prostředí) zajistí zobrazení data a času v normalizovaném formátu odpovídajícím vašemu národnímu prostředí. Vaše národní prostředí je definováno na základě geografických a kulturních informací, které jste zadali při instalaci operačního systému. Určuje takové věci jako symbol měny, formát papíru, časové pásmo a další kulturní normy.
date +%c
Nyní je rok ve výstupu zobrazen na logičtějším místě.
Příkazu `date` můžete předat více voleb najednou. Sekvence voleb se nazývá formátovací řetězec. Pro zobrazení názvu dne (%A), dne v měsíci (%d) a názvu měsíce (%B) použijte následující příkaz:
date +%A%d%B
Výsledek sice funguje, ale nevypadá příliš dobře. Můžeme vkládat mezery, pokud celý formátovací řetězec uzavřeme do uvozovek. Všimněte si, že znak `+` je mimo uvozovky.
date +"%A %d %B"
Do formátovacího řetězce můžeme přidat i vlastní text:
date +"Today is: %A %d %B"
Procházení manuálové stránky příkazu `date` a hledání správné volby může být časem únavné. Proto jsme možnosti rozdělili do kategorií, aby bylo jejich použití přehlednější.
Možnosti pro zobrazení data a času
%c: Zobrazí datum a čas ve formátu podle vašeho národního prostředí, včetně časového pásma.
Možnosti pro zobrazení data
%D: Zobrazí datum ve formátu mm/dd/rr.
%F: Zobrazí datum ve formátu rrrr-mm-dd.
%x: Zobrazí datum ve formátu dle vašeho národního prostředí.
Možnosti pro zobrazení dne
%a: Zobrazí zkrácený název dne (Po, Út, St, atd.).
%A: Zobrazí celý název dne (pondělí, úterý, středa, atd.).
%u: Zobrazí číslo dne v týdnu (pondělí=1, úterý=2, středa=3 atd.).
%w: Zobrazí číslo dne v týdnu (neděle=0, pondělí=1, úterý=2 atd.).
%d: Zobrazí den v měsíci s nulou na začátku, pokud je potřeba (01, 02 … 09).
%e: Zobrazí den v měsíci s mezerou na začátku, pokud je potřeba (‚ 1‘, ‚ 2‘ … ‚ 9‘).
%j: Zobrazí den v roce s až dvěma nulami na začátku, pokud je potřeba.
Možnosti pro zobrazení týdne
%U: Zobrazí číslo týdne v roce, kde se neděle považuje za první den týdne.
%V: Zobrazí číslo týdne v roce podle normy ISO, kde se pondělí považuje za první den týdne.
%W: Zobrazí číslo týdne v roce, kde se pondělí považuje za první den týdne.
Možnosti pro zobrazení měsíce
%b nebo %h: Zobrazí zkrácený název měsíce (led, úno, bře, atd.).
%B: Zobrazí celý název měsíce (leden, únor, březen, atd.).
%m: Zobrazí číslo měsíce s nulou na začátku, pokud je potřeba (01, 02, 03 … 12).
Možnosti pro zobrazení roku
%C: Zobrazí století bez roku. Např. pro rok 2019 zobrazí 20.
%y: Zobrazí rok jako dvě číslice. Např. pro rok 2019 zobrazí 19.
%Y: Zobrazí rok jako čtyři číslice.
Možnosti pro zobrazení času
%T: Zobrazí čas ve formátu HH:MM:SS.
%R: Zobrazí hodiny a minuty ve formátu HH:MM bez sekund, používá 24hodinový formát.
%r: Zobrazí čas ve formátu dle vašeho národního prostředí, používá 12hodinový formát s indikátorem dopoledne/odpoledne.
%X: Zobrazí čas ve formátu dle vašeho národního prostředí, používá 24hodinový formát (v praxi se může chovat stejně jako %r).
Možnosti pro zobrazení hodin
%H: Zobrazí hodinu ve formátu 00, 01, 02…23.
%I: Zobrazí hodinu pomocí 12hodinového formátu 00, 01, 02 … 12, s nulou na začátku, pokud je potřeba.
Možnosti pro zobrazení minut
%M: Zobrazí minuty ve formátu 01, 02, 03 … 59, s nulou na začátku, pokud je potřeba.
Možnosti pro zobrazení sekund
%s: Zobrazí počet sekund od 1970-01-01 00:00:00, od začátku Unixové epochy.
%S: Zobrazí sekundy ve formátu 01, 02, 03 … 59, s nulou na začátku, pokud je potřeba.
%N: Zobrazí nanosekundy.
Možnosti pro zobrazení informací o časovém pásmu
%z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC.
%:z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC, s „:“ mezi hodinami a minutami. (Pozor na „:“ mezi znakem % a z).
%::z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC, s „:“ mezi hodinami, minutami a sekundami. (Pozor na „::“ mezi znakem % a z).
%Z: Zobrazí abecední název časového pásma.
Možnosti související s formátováním
%p: Zobrazí indikátor AM nebo PM velkými písmeny.
%P: Zobrazí indikátor dopoledne nebo odpoledne malými písmeny.
%t: Zobrazí tabulátor.
%n: Zobrazí nový řádek.
Možnosti pro úpravu dalších voleb
Tyto modifikátory lze vložit mezi % a písmeno další volby pro úpravu jejího zobrazení. Například %-S odstraní úvodní nulu pro jednociferné hodnoty sekund.
–: Pomlčka zabrání odsazení nulou u jednociferných hodnot.
_: Podtržítko přidá úvodní mezery pro jednociferné hodnoty.
0: Přidá úvodní nuly pro jednociferné hodnoty.
^: Použije velká písmena, pokud je to možné (ne všechny volby to respektují).
#: Použije pro volbu opačný případ, než je výchozí, pokud je to možné (ne všechny volby to respektují).
Další dva praktické tipy
Pro zjištění času poslední úpravy souboru použijte volbu `-r` (odkaz). Všimněte si, že se zde používá pomlčka místo znaku `%` a nevyžaduje znak `+`. Zkuste tento příkaz ve svém domovském adresáři:
date -r .bashrc
Pomocí proměnné `TZ` lze změnit časové pásmo pouze pro dobu trvání jednoho příkazu:
TZ=GMT date +%c
Použití `date` ve skriptech
Zobrazení data a času ve skriptu Bash je velmi jednoduché. Vytvořte textový soubor s následujícím obsahem a uložte ho jako `gd.sh`:
#!/bin/bash TODAY=$(date +"Today is %A, %d of %B") TIMENOW=$(date +"The local time is %r") TIME_UK=$(TZ=BST date +"The time in the UK is %r") echo $TODAY echo $TIMENOW echo $TIME_UK
Následujícím příkazem udělte skriptu oprávnění ke spuštění:
chmod +x gd.sh
Spusťte skript pomocí tohoto příkazu:
./gd.sh
Příkaz `date` lze použít také pro generování časových razítek. Následující skript vytvoří adresář, jehož název tvoří časové razítko. Poté do něj zkopíruje všechny textové soubory z aktuálního adresáře. Pravidelným spouštěním tohoto skriptu můžete vytvářet zálohy svých textových souborů. V průběhu času tak získáte řadu adresářů s různými verzemi vašich textových souborů.
Upozorňujeme, že se nejedná o plnohodnotný zálohovací systém, ale pouze o demonstrativní příklad.
Vytvořte textový soubor s následujícím obsahem a uložte ho jako `snapshot.sh`:
#!/bin/bash # získáme aktuální datum a čas date_stamp=$(date +"%F-%H-%M-%S") # vytvoříme adresář s tímto názvem mkdir "$date_stamp" # zkopírujeme soubory z aktuálního adresáře do nově vytvořeného cp *.txt "$date_stamp" # vše hotovo, vypíšeme zprávu echo "Text files copied to directory: "$date_stamp
Následujícím příkazem udělte skriptu oprávnění ke spuštění:
chmod +x snapshot.sh
Spusťte skript pomocí tohoto příkazu:
./snapshot.sh
Uvidíte, že byl vytvořen adresář, jehož název odpovídá datu a času spuštění skriptu. Uvnitř tohoto adresáře se nachází kopie všech textových souborů.
S trochou kreativity lze příkaz `date` využít mnoha produktivními způsoby.