Home grown mail scheduler with bash script and cron

If you are using Linux (Fedora/Ubuntu or anything else) then you do get a lot of tools and one of them is cron. Very very useful. Just write some script that can do the task for you, put it in cron and forget it. So, here is a home grown way to schedule mails.

First, copy this script below:

#!/bin/bash -
#===============================================================================
#
#          FILE: sched_mail.sh
#
#         USAGE: ./sched_mail.sh
#
#   DESCRIPTION:
#
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: Amit Agarwal (aka), 
#      REVISION:  ---
#===============================================================================

mailfile="~/mail"
if [[ $(wc -l $mailfile|awk '{print $1}' ) -ge 5 ]]
then
    to=$(grep ^To: $mailfile|sed 's/To: //')
    echo "Good to send mail... to = $to"
    sendmail -t <$mailfile
    echo "once mail is send, delete the contents of file"
    echo "sed -i '4,$ d' $mailfile"
fi

Now, create a file called mail in your home directory, with the following contents:

To: Email
From: Email
Subject: Test mail from script.

Put the first script in cron to run every minute. And whenever you want to schedule a mail, create your mail in plaintext and then schedule that with at command to be appended to the ~/mail file. As soon as that file is appended, it will be sent out in 1 min 🙂

 

 

Enhanced by Zemanta

Delete all but some directories

I think, like me, you would have faced a lot of situations, where you wanted to delete all the files or directories in a location, leaving only the required files/directories. So, I have a directory containing lots of files/directories and I want to delete most of them except some 5/10 of them, how to I do it.

I finally wrote a small script to do that. First save list of files that you do not want to delete in file called “listnames” and then execute the below script. This will give you the rm commands that you need to execute. If you want you can execute the rm command from the script, but to be able to review, I just have the commands echoed.

#!/bin/bash -
#===============================================================================
#
#          FILE: del_all_logs.sh
#
#         USAGE: ./del_all_logs.sh
#
#   DESCRIPTION:
#
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: Amit Agarwal (aka)
#      REVISION:  ---
#===============================================================================

all_runs=$(echo *)
while read line
do
    all_runs=$(echo $all_runs |sed 's/'"$line"'//')
done 
all_runs=$(echo $all_runs |sed 's/'"$0"'//')
all_runs=$(echo $all_runs |sed 's/'"listnames"'//')
echo rm -rf $all_runs


 

Enhanced by Zemanta

convert tabs to spaces, the easy way

Lots of times you want to convert tabs to spaces and sometimes from a shell script, if that is the case, then simple solution is “tidy“. First you need to install tidy as follows:

sudo yum install tidy

and then you can use the command tab2space.

tab2spcae

This will print the output to STDOUT by default which you can redirect if you want.

 

Enhanced by Zemanta