nixCraft Poll

Topics

SSH: Rotate backup shell script to remove directories (old backup files)

Posted by Vivek Gite [Last updated: October 9, 2007]

Most time you have a limited space on the remote SFTP/ SSH backup server. Here is the script that periodically cleanup old backup files from the server i.e it will remove old directories.

Requirements

Script will automatically calculate date from today's date. By default it will keep only last 7 days backup on server. You can easily increase / decrease this limit. In order to run script you must meet the following criteria:

Sample Script Usage

Run the script as follows:
./rot.backup.sh 7 /mysql "rm -rf"
Where,

Sample Shell Script

Install following script (download link):

#!/bin/bash
if [ "$#" == "0" ];then
  echo "$0 upper-limit path {command}"
  exit 1
fi
### SSH Server setup ###
SSH_USER="vivek"
SSH_SERVER="nas.nixcraft.in"
START=7
DIR_FORMAT="%d-%m-%Y" # DD-MM-YYYY format
#DIR_FORMAT="%m-%d-%Y" #MM-DD-YYYY format
## do not edit below ##
LIMIT=$( expr $START + $1 )

## default CMD ##
CMD="ls"
SSH_PATH="."

[ "$3" != "" ] && CMD="$3" || :
[ "$2" != "" ] && SSH_PATH="$2" || :

DAYS=$(for d in $(seq $START $LIMIT);do date --date="$d days ago" +"${DIR_FORMAT}"; done)
for d in $DAYS
do
  ssh ${SSH_USER}@${SSH_SERVER} ${CMD} ${SSH_PATH}/$d
done

Run above script via cron tab (cronjob):
@daily /path/to/rot.ssh.script 7 "/html" "rm -rf"
@daily /path/to/rot.ssh.script 7 "/mysql" "rm -rf"

Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates. You can Email this page to a friend.

You may also be interested in other helpful articles:

Discussion on This Article:

  1. Yannick Says:

    I usualy use someting like this:

    find /var/backup/ -name ‘backup*’ -mtime +7 | xargs rm -f

  2. vivek Says:

    Yannick,

    Thanks for quick one liner :)

    Just a quick note many backup services only allows limited set of commands in chrooted ssh jail. Many time find and other advanced commands are not available so you need to craft something like this

  3. Yannick Says:

    Ohhhh..yes..’find’ will probably don’t work in most of ssh jails..

    BTW… Thank you very much Vivek for all your very useful tips.. :)

  4. Reetika Says:

    Hi
    Pls suggest any one liner or script for my probelm.
    I need to tremove the files which are 14 days old but need to skip those folder which are having any single file with latest date.
    Need to skip whole folder which contain any single latest file with all the old files also which that particular folder contain.

    my script is like this
    find . -mtime +14 -exec rm -f {} \;
    find . -type d -mtime +14 -exec rmdir {} \;
    perl -MFile::Find -e”finddepth(sub{rmdir},’.')”
    #find . -depth -type d -empty -exec rmdir {} \;

    Thanks
    Reetika Gupta

  5. Al Says:

    Watch out of that pipe comes back empty - rm -f will then act on whatever the contents of the current directory are!

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Tags: , , , , , , , ,

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.