Download of the day: Easy date manipulation with yest utility under Linux/UNIX
All these years I was using *all dirty shell script hacks* to create my own date manipulation utilities for backups and other admin task. Thanks to this project no more dirty work.
Recently our site visitor Milton left a comment about this nice utility. This utility is very good if you would like to do lots of date manipulation or to crate report/log file names with date in filename.
From the project home page:
yest is a command line date/time manipulation and formatting program, very useful in scripts. You can easily add or subtract days, hours and/or minutes from a specified date. It supports all date command output formats plus more.
This program is called "yest" because the default is to output yesterday's date. This utility knows about leap year, aylight savings time, and such variations.
Task: Install yest
Download yest from project home page. Or use wget command as follows:
$ cd /tmp
$ wget http://easynews.dl.sourceforge.net/sourceforge/yest/yest-2.7.0.3.tgz
Untar the source code:
$ tar -zxvf yest-2.7.0.3.tgz
Compile and install binary
$ su -
# gcc -o /usr/bin/yest yest-2.7.0.3.c
Install man page:
# cp yest-2.7.0.3.man1 yest.1
# gzip yest.1
# cp yest.1.gz /usr/share/man/man1/
How do I use yest?
Following command will display yesterdays date (default):
$ date
Thu Oct 12 23:45:24 IST 2006
$ yest
10/11/2006
Display the date ten days ago (-10 or +10 next 10 days)
$ date
Thu Oct 12 23:46:23 IST 2006
$ yest -10
10/02/2006
$ yest +10
10/22/2006
Format date in dd-mm-yyyy:
$ yest -10 "%d-%m-%Y"
02-10-2006
Get more help
$ yest --help
$ man yest
yest in action
So to executing a script/command on the last day of a month, I was using following script:
#! /bin/bash
TOM=$(TZ=MST-24 date +%d)
if [ $TOM -eq 1 ]; then
# commands or script on the last day of a month
/path/to/mytask
fi
But with yest it is just one line shell script ![]()
[ $(yest +0 "%d") -eq $(yest "%L") ] && /path/to/mytask || :
=> yest Download is highly recommended tool for all seasoned UNIX admin.
Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
You may also be interested in other helpful articles:
- Shell Scripting: Creating report/log file names with date in filename
- Executing script or command on the last day of a month
- Linux / UNIX: display time of different time zones using TZ environment variable
- Getting Yesterdays or Tomorrows day with shell date command
- Shell script to check / monitor domain renew / expiration date
Discussion on This Article:
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!


what about using AT or CRON?
> at 00:00 Aug 31
script goes here
ctrl+D
Tiger
Sometime you have 29, 28 (leap year), 30, 31 as month-end day. Sometime day pattern get repeated as 31, 31 (july, aug).
I don\’t just wanna keep changing at command according to month. I manage 100 of boxes I don\’t have time to keep writing at command for each box. So this tool makes for sense to me.
ehm… you have never tried
date -d “yesterday” or date -d “+10 days” have you?
date already does all this…
Problem compiling an idea.
gcc -o /home/deytel/bin/yest /home/deytel/yest-2.7.0.4.c
/home/deytel/yest-2.7.0.4.c: In function `main’:
/home/deytel/yest-2.7.0.4.c:1470: structure has no member named `tm_zone’
May be you need headers files…
What about when timezone identifiers change?
Like MST to MDT?
gr8 …. its rocks on tru64
i hav used following command to compile
cc -o yest yest-2.7.0.3.c
now i can do all date manuculation as i used to do it with GNU date
Thanks