Shell script to open files based on date

by on February 11, 2006 · 2 comments· LAST UPDATED February 11, 2006

in

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.

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 2 comments… read them below or add one }

1 Ravi August 28, 2007 at 3:03 pm

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

Reply

2 Joshua Adom July 7, 2009 at 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?

Reply

Leave a Comment

Previous post:

Next post: