≡ Menu

Shell script to open files based on date

I am responsible for couple of *nix servers including Linux, Solaris and HP-UX system. Some time I just wanna find out and open files based upon given date i.e. open file based on date criteria. For example find out all *.pl files accessed on 12-Dec-2004. Since there is not ready to use command exists I wrote script. You can use this script or alias to automate this procedure. You can find out file access date using ls -l command or using stat (display file or filesystem status including access date or time) command. Here is simple logic:

$ ls -l /path/to/file | awk ‘{ print $6 }’

2006-11-22

Once file access date obtained, you can easily compare it using IF command in a shell script. Here is my small script:

#!/bin/bash
DATE="$1"
FILE="$2"
FDATE=$(ls -l $FILE | awk '{ print $6 }')
if [ "$DATE" == "$FDATE" ];then
vi $FILE
fi

You can run or use script as follows:

$ ./script.sh 2006-11-22 myfile.txt

File myfile.txt will be only open using vi text editor, if last access date was 2006-11-22. Above script works but if you want to handle multiple files then you need to modify script as follows:

#!/bin/bash
#date to match
DATE="$1"
# file, it can be wild cards too
FILE="$2"
# List of file to edit
# You can use $FLIST for other purpose too
FLIST=""
for f in $FILE
do
FDATE=$(ls -l $f | awk '{ print $6 }')
if [ "$DATE" == "$FDATE" ];then
FLIST="$FLIST $f"
fi
done

# just display list of files and let the use do
# whatever they wanna do with files
[ "$FLIST" != "" ] && echo $FLIST || echo "Sorry no files found to match $DATE date."

# Uncomment following if you wanna open all files using vi
#vi $FLIST

You can run script as follows:

$ ./script.sh “2004-12-31” “*.pl”

getip.pl reboot.pl dnsupdate.pl

Above script use for loop in shell script to match file one by one, if file date is matched it start to append file names to $FLIST variable. At the end, script displays all matched files. You can also use find command, but I prefer above script as it exactly matches date.

Share this on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 2 comments… add one }
  • Ravi August 28, 2007, 3:03 pm

    This website is Really good for Linux Beginners as well as Professionals

  • Joshua Adom July 7, 2009, 3:44 pm

    This really good but I need help.
    I have written a backup script as follows

    echo "Taking Domain Backup..."
            hostname
            echo "Tarring intellectprod"
            sleep 2
            cd /usr/weblogic/bea/user_projects/domains
            tar -cvf intellectprod_`date "+%d%b%Y"`.tar intellectprod
            echo "Zipping intellectprod"
    	sleep 2
            gzip intellectprod_`date "+%d%b%Y"`.tar
    	echo 	"Moving intellectprod_date.tar.gz to Backup folder"
    	sleep 2
    	mv intellectprod_`date "+%d%b%Y"`.tar.gz /usr/weblogic/Backup
    

    what I want to do now is to reverse the process in case there is a disaster.
    i want to be able to identfy the most current folder and use for restore.
    can you help?

Security: Are you a robot or human?

Leave a Comment