≡ Menu

Linux / UNIX Tar Full and Incremental Tape Backup Shell Script

Install this script using cronjob.

See how to use tar and mt command.

To restore files / data from tar archives.

List the files:
# tar tvf /dev/st0
Extract the entire archive into current directory:
# tar xvpf /dev/st0
Extract only certain files or dirs into current directory. For example. Extract only home/vivek directory
# tar xvpf /dev/st0 home/vivek
You can also restore one file:
# tar xvpf /dev/st0 home/vivek/app/src/main.c

{ 20 comments… add one }
  • Cr0t June 7, 2010, 7:15 pm

    You might want to check out dar.

  • azerttyu December 4, 2009, 3:51 pm


    Nice work, to better internationalization usage it looks better to use “normalized” date. Then use :
    NOW=$(date +”%w”)
    with case test from 0 to 6

    and to partial_backup() function tar -N yesterday disable error problems in another language context.

    With no English locales, there some pb without theses hacks

  • azerttyu December 4, 2009, 9:11 am


    i have just found your website, and i try your nice script. Maybe a little update to do.
    Your script works only with English locales, for a better internationalization i twill be nice to change NOW=$(date +”%a”) to NOW=$(date +”%w”)

    Then do test between 0 and 6, with full backup to 1 (Monday)

  • hrabbit October 25, 2009, 2:08 pm

    Thanks for the nice script Vivek,

    Good to see you haven’t added compression which is so widely used but can lead to disasters when tapes fail.

    Might be nice to extend this script to allow spanned archives however, in the event that data is larger than the storage capacity.

  • Jane June 25, 2009, 8:42 pm

    how I add email notification to a user when the backup has finished successful or has stopped with errors.

    • Vivek Gite June 29, 2009, 6:32 am

      Add function like as follows:

       local s=$1
      if [ $s -eq 0 ]
            echo "Backup Successfully done @ $(hostname)" | mail -S 'Backup Done' you@example.com
            echo "Backup FAILED @ $(hostname)" | mail -S 'Backup Failed' you@example.com

      Find the line in full_backup()


      and append the following code to send email status backup_status $?, in the end should look as follows:

      backup_status $?

      Also, update partial_backup() as follows:

      $TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIR
      backup_status $?


      • mrlayance September 1, 2009, 4:02 pm

        When I run the backup everything seems to run fine, log looks clean. However, everytime I get a Backup failed.

        Could someone explain this part of the code?

        local s=0
        for d in $BACKUP_ROOT_DIR
        if [ ! -d /$d ];
        echo “Error : /$d directory does not exits!”
        # if not; just die
        [ $s -eq 1 ] && exit 1

        • hrabbit October 25, 2009, 2:04 pm

          @ mrlayance,

          That function loops over all entries defined in $BACKUP_ROOT_DIR and ensures they exist. If they all exist, the function returns, which is correct, otherwise each directory that doesn’t exist is printed to STDOUT and then the script dies afterwards.

  • Jane June 25, 2009, 5:41 pm

    How do I add that an email be sent when tar has been completed or if it has completed with errors or it just didn’t backup?

  • Arjan June 23, 2009, 6:54 am


    I have used your script, but I get an error line 101: $LOGFILE: ambiguous redirect
    I run the script as root.

    The variable $LOGFILE get defined as /root/backup/log/Tue.backup.log

    The last part of the script is
    case $NOW in
    Mon|Tue|Wed|Thu|Fri) full_backup;;
    *) ;;
    esac > $LOGFILE 2>&1

    Kind regards,

    • Arjan June 23, 2009, 7:05 am

      I found it. in line 34 of the script the variable is defined as $LOGFIILE instead of $LOGFILE

      Correct LOGFIILE=$LOGBASE/$NOW.backup.log in LOGFILE=$LOGBASE/$NOW.backup.log and it runs

  • Aswin June 8, 2009, 7:44 am

    how to description $EXCLUDE_CONF file


    • Vivek Gite June 10, 2009, 9:44 pm

      You have to create /root/.backup.exclude.conf as follows to exclude access_log or error_log file:

  • Aswin June 8, 2009, 7:36 am

    ok I can fix the problem, but when I start again
    I got this message
    /bin/tar: /dev/st0: Wrote only 0 of 10240 bytes
    /bin/tar: Error is not recoverable: exiting now

    how to fix this problem,

  • Aswin June 8, 2009, 7:33 am

    nice script
    but when I try got error like this
    ./backupAll.sh: line 1: syntax error near unexpected token `(‘
    ./backupAll.sh: line 1: ` UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux)’

    I just copy n paste from your script n change some directory, can you help me… how to fix ?
    and how to backup multiple directory
    example I have
    and your script BACKUP_ROOT_DIR=”home sales”
    can I bring comma (,) like this BACKUP_ROOT_DIR=”home,home2,home3″


  • Tawatchai May 13, 2009, 7:46 am

    It’s great, but I can not use this script with Linux Enterprise 5. When I use command:
    “mt -f /dev/st0”, its return this error “-bash: mt: command not found”. Please suggest me, how can I backup file to tape.


    • Vivek Gite May 15, 2009, 10:23 am

      Install mt command

  • Divakar April 21, 2009, 7:52 pm

    Hi Vivek,

    I want to use mutiple directory/sub-directory to get the files…


    Please guide me how to include mulitple folders in this script.


  • pk March 20, 2009, 4:32 am

    Great … Good one :)

    Helped a lot .

  • ayyanagouda March 13, 2009, 6:57 pm

    I want to learn shell scripting so I need information about shell scripting in solaris unix or linux.Please send me detail information with basic concept.
    Thank U

Security: Are you a robot or human?

Leave a Comment