Als je vaker met datums moet rekenen in shellscripts, kun je dat met het programma date uit coreutils proberen, maar dat vereist heel wat extra werk. In dat geval is het pakket dateutils heel wat handiger. Het bevat acht kleine programma’s die datums manipuleren. Zo genereer je met dseq alle datums tussen twee datums, waarbij je zelfs bepaalde weekdagen kunt overslaan. Bijvoorbeeld:

$ dseq 2013-10-29 2013-11-04 –skip sat,sun

2013-10-29

2013-10-30

3013-10-31

2013-11-01

2013-11-04

En met dtest vergelijk je datums, wat handig is in scripts, bijvoorbeeld:

if dtest today –gt 2013-01-01; then

echo “yes”

fi

Iets gelijkaardigs doet het commando dgrep, waarmee je regels in een bestand of stdout kunt filteren die aan een vergelijking met een datum voldoen, zoals in:

dmesg -T | dgrep ‘>=2013-10-17’ -i ‘%a %b %d %T %Y’

Hierin kun je met de optie -i het invoerformaat van het tijdstip definiëren. Verder kun je met dadd een tijdsduur bij een datum en tijd optellen (bijvoorbeeld met dadd now +4h) en met ddiff doe je het omgekeerde: je berekent het verschil tussen twee dagen of tijdstippen. Bekijk zeker ook dconv om een tijdstip naar een andere tijdzone of kalender te converteren en dround om datums ‘af te ronden’ naar bijvoorbeeld de eerste dag van de maand of de vorige maandag. Kortom, heb je nu wat complexere shellscripts geschreven waarin datums worden gemanipuleerd, dan kun je die heel wat vereenvoudigen met de tools uit dateutils.

http://www.fresse.org/dateutils/