Bash: Log File Archive Script


There are some logs files are in such format: 20120130-174201-130947.log. I created two bash scripts to archive them by year/month/day: The first one is based on the log file creation date, the other one is based on the time stamp within the file name.

#Backup Script1: Use modification date of the file
#!/bin/bash

#Define the Log files location
LOGS_FOLDER=~/scripts/log

#Define the Archived log files location
ARCHIVE_FOLDER=~/scripts/archive

#Only archive the files older than X Days, the format is +n
X=+90

#Create a temp folder for processing log files
mkdir -p $ARCHIVE_FOLDER/temp

#Move the logs that older than X days to a temp folder
mv -f $(find $LOGS_FOLDER -type f -mtime $X) $ARCHIVE_FOLDER/temp

#Process the archived logs to categarize them based on the Year/Month/Day
for log in $ARCHIVE_FOLDER/temp/*
do
    date=`echo $log | grep -oE ’20[0-9][0-9][0-9][0-9][0-9][0-9]’`
    year=${date:0:4}
    month=${date:4:2}
    day=${date:6:2}
   
    mkdir -p $ARCHIVE_FOLDER/$year
    mkdir -p $ARCHIVE_FOLDER/$year/$month
    mkdir -p $ARCHIVE_FOLDER/$year/$month/$day
    cp -rf $log $ARCHIVE_FOLDER/$year/$month/$day
 
done

#Remove the temp folder
rm -rf temp

—————————————————————————–

#Backup Script2: Use time stamp within the filename
#!/bin/bash

#Define the Log files location
LOGS_FOLDER=~/scripts/log

#Define the Archived log files location
ARCHIVE_FOLDER=~/scripts/archive

#Only archive the files older than X Days
X=180

ARC_DATE=`date –date=”$X day ago” -I`
echo $X days ago, it is $ARC_DATE
echo All logs older than $ARC_DATE will be archived
ARC_DATE_S=`date –date=”$ARC_DATE” +%s`
#echo ARC_DATE_S is $ARC_DATE_S

#Archived logs and categorize them based on the Year/Month/Day
for log in $LOGS_FOLDER/*
do
    date=`echo $log | grep -oE ’20[0-9][0-9][0-9][0-9][0-9][0-9]’`
    year=${date:0:4}
    month=${date:4:2}
    day=${date:6:2}

    LOG_DATE=$year-$month-$day
    echo This log $log is on $LOG_DATE
    LOG_DATE_S=`date –date=”$LOG_DATE” +%s`
    #echo LOG_DATE_S is $LOG_DATE_S
   
    n=$(($ARC_DATE_S – $LOG_DATE_S))
           
    if [[ $n == -* ]]; then
    echo “Don’t archive this log”
    echo “*************************************************”
    else
    echo “Archive this log”
    echo “*************************************************”
    mkdir -p $ARCHIVE_FOLDER/$year
    mkdir -p $ARCHIVE_FOLDER/$year/$month
    mkdir -p $ARCHIVE_FOLDER/$year/$month/$day
    mv $log $ARCHIVE_FOLDER/$year/$month/$day
     fi
done

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s