The situation
A server in Europe needs to transfer a log file which is written every hour from a server in the US. The filename format is
20171013-1039.log.gz
And we want the transfer to be done every hour.
How we did it
I learned something about the date command. I wanted to do date arithmetic, like calculate the previous hour. I’ve only ever done this in Perl. Then I saw how someone did it within a bash script.
First the timezone
export TZ=America/New_York |
sets the timezone to that of the server which is writing the log files. This is important.
Then get the previous hour
$ onehourago=`date ‐‐date='1 hours ago' '+%Y%m%d‐%H'`
That’s it!
Then the ftp command looks like
$ get $onehourago
If we needed the log from two hours ago we would have had
$ twohourago=`date ‐‐date='2 hours ago' '+%Y%m%d‐%H'`
If one day ago
$ onedayago=`date ‐‐date='1 days ago' '+%Y%m%d‐%H'`
One hour from now
$ onedayago=`date ‐‐date='+1 hours' '+%Y%m%d‐%H'`
etc.
Why the timezone setting?
Initially I skipped the timezone setting and I simply put 7 hours ago, given that Europe and New York are six hours apart, and that’ll work 95% of the time. But because Daylight Savings time starts and ends at different times in the two continents, that will produce bad results for a few weeks a year. So it’s cleaner to simply switch the timezone before doing the date arithmetic.
Conclusion
The linux date command has more features than I thought. We’ve shown how to create some relative dates.
References and related
On a linux system
$ info date
will give you more information and lots of examples to work from.