Howes-IT-Going - Unix RSYNC Sample Code


/usr/bin/rsync


##########################################################################################
#  SCRIPT: hig_rsync.sh 
#    APPL: generic rsync 
#   USAGE: TEST RSYNC for test1 to test2 rsync_user 
# KEYWORD: Synchronization, rsync 
#     VER: 1.0 
# 
# SCRIPT OWNER: Steven C. Howes - Howes-IT-Going 07/09/2007 
#  
# Run as rsync_user on test1 /opt/rsync_user/bin/hig_rsync.sh to rsync over to test2
#  
# CHANGE ACTIVITY; 
# ---------------------------------------------------------------------------------------- 
# RSYNC script to Sync test1 to test2. 
########################################################################################## 

#----------------------------------------------------------------------------------- 
# Variables  
#----------------------------------------------------------------------------------- 

DATE=`date` 
LOGFILE=./steves.log 
SCRIPT=`basename ${0} 2>/dev/null | awk -F \. '{print $1}'`; [ $? -ne 0 ] && echo "Unable to get basename" && exit 1 

#----------------------------------------------------------------------------------- 
# ALL HOME1 references are parent directory -- have to specify dirs back one from current when rsync'ing 
#----------------------------------------------------------------------------------- 

RSYNC_HOME1=/opt 
RSYNC_HOME=/opt/rsync_user                          

RSYNC_EXCLUDE_FILE=${SCRIPT}_exclude.ini         

FAILOVER=test2 
CHOWN=/usr/bin/chown 
RSYNC=/usr/bin/rsync 

#----------------------------------------------------------------------------------- 
# Run rsync for rsync_user on test1 /opt/rsync_user/bin/hig_rsync.sh  
# Command compresses, sets owner, sets group, sets permissions, and displays verbose 
#----------------------------------------------------------------------------------- 

function rsync_user_sync { 

   if [ -s $RSYNC_EXCLUDE_FILE ]; then 
      echo "$RSYNC_EXCLUDE_FILE file was found ...........">>$LOGFILE 
      echo "Syncronizing... please wait" >>$LOGFILE 
      echo "$RSYNC -avz -e ssh --exclude-from=$RSYNC_EXCLUDE_FILE $RSYNC_HOME $FAILOVER:$RSYNC_HOME1" >>$LOGFILE 
      $RSYNC -avz -e ssh --exclude-from=$RSYNC_EXCLUDE_FILE $RSYNC_HOME $FAILOVER:$RSYNC_HOME1 >>$LOGFILE 
   else 
      echo "$RSYNC_EXCLUDE_FILE Exclude file was not found ..........." >>$LOGFILE  
   fi # End rsync exclude file test 

   echo "rsync_user_sync is completed" >>$LOGFILE 

} #End rsync_user_sync function 

#----------------------------------------------------------------------------------- 
# End of rsync_user_sync 
#----------------------------------------------------------------------------------- 

#----------------------------------------------------------------------------------- 
# Main Line 
#----------------------------------------------------------------------------------- 

echo "-----------------------------------------------------------------" >>$LOGFILE 
echo " ${DATE}  Start of rsync_user_sync Process" >>$LOGFILE 
echo "-----------------------------------------------------------------">>$LOGFILE 

rsync_user_sync 

echo "-----------------------------------------------------------------" >>$LOGFILE 
echo " ${DATE}  End of rsync_user_sync Process" >>$LOGFILE 
echo "-----------------------------------------------------------------">>$LOGFILE 

#----------------------------------------------------------------------------------- 
# End Main 
#----------------------------------------------------------------------------------- 




RSYNC OPTIONS SUMMARY 
Here is a short summary of the options available in rsync. Please refer to the detailed description below for a complete description. 



 -v, --verbose               increase verbosity 
 -q, --quiet                 suppress non-error messages 
     --no-motd               suppress daemon-mode MOTD (see caveat) 
 -c, --checksum              skip based on checksum, not mod-time & size 
 -a, --archive               archive mode; same as -rlptgoD (no -H) 
     --no-OPTION             turn off an implied OPTION (e.g. --no-D) 
 -r, --recursive             recurse into directories 
 -R, --relative              use relative path names 
     --no-implied-dirs       don't send implied dirs with --relative 
 -b, --backup                make backups (see --suffix & --backup-dir) 
     --backup-dir=DIR        make backups into hierarchy based in DIR 
     --suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir) 
 -u, --update                skip files that are newer on the receiver 
     --inplace               update destination files in-place 
     --append                append data onto shorter files 
 -d, --dirs                  transfer directories without recursing 
 -l, --links                 copy symlinks as symlinks 
 -L, --copy-links            transform symlink into referent file/dir 
     --copy-unsafe-links     only "unsafe" symlinks are transformed 
     --safe-links            ignore symlinks that point outside the tree 
 -k, --copy-dirlinks         transform symlink to dir into referent dir 
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir 
 -H, --hard-links            preserve hard links 
 -p, --perms                 preserve permissions 
 -E, --executability         preserve executability 
     --chmod=CHMOD           affect file and/or directory permissions 
 -o, --owner                 preserve owner (super-user only) 
 -g, --group                 preserve group 
     --devices               preserve device files (super-user only) 
     --specials              preserve special files 
 -D                          same as --devices --specials 
 -t, --times                 preserve times 
 -O, --omit-dir-times        omit directories when preserving times 
     --super                 receiver attempts super-user activities 
 -S, --sparse                handle sparse files efficiently 
 -n, --dry-run               show what would have been transferred 
 -W, --whole-file            copy files whole (without rsync algorithm) 
 -x, --one-file-system       don't cross filesystem boundaries 
 -B, --block-size=SIZE       force a fixed checksum block-size 
 -e, --rsh=COMMAND           specify the remote shell to use 
     --rsync-path=PROGRAM    specify the rsync to run on remote machine 
     --existing              skip creating new files on receiver 
     --ignore-existing       skip updating files that exist on receiver 
     --remove-source-files   sender removes synchronized files (non-dir) 
     --del                   an alias for --delete-during 
     --delete                delete extraneous files from dest dirs 
     --delete-before         receiver deletes before transfer (default) 
     --delete-during         receiver deletes during xfer, not before 
     --delete-after          receiver deletes after transfer, not before 
     --delete-excluded       also delete excluded files from dest dirs 
     --ignore-errors         delete even if there are I/O errors 
     --force                 force deletion of dirs even if not empty 
     --max-delete=NUM        don't delete more than NUM files 
     --max-size=SIZE         don't transfer any file larger than SIZE 
     --min-size=SIZE         don't transfer any file smaller than SIZE 
     --partial               keep partially transferred files 
     --partial-dir=DIR       put a partially transferred file into DIR 
     --delay-updates         put all updated files into place at end 
 -m, --prune-empty-dirs      prune empty directory chains from file-list 
     --numeric-ids           don't map uid/gid values by user/group name 
     --timeout=TIME          set I/O timeout in seconds 
 -I, --ignore-times          don't skip files that match size and time 
     --size-only             skip files that match in size 
     --modify-window=NUM     compare mod-times with reduced accuracy 
 -T, --temp-dir=DIR          create temporary files in directory DIR 
 -y, --fuzzy                 find similar file for basis if no dest file 
     --compare-dest=DIR      also compare received files relative to DIR 
     --copy-dest=DIR         ... and include copies of unchanged files 
     --link-dest=DIR         hardlink to files in DIR when unchanged 
 -z, --compress              compress file data during the transfer 
     --compress-level=NUM    explicitly set compression level 
 -C, --cvs-exclude           auto-ignore files in the same way CVS does 
 -f, --filter=RULE           add a file-filtering RULE 
 -F                          same as --filter='dir-merge /.rsync-filter' 
                             repeated: --filter='- .rsync-filter' 
     --exclude=PATTERN       exclude files matching PATTERN 
     --exclude-from=FILE     read exclude patterns from FILE 
     --include=PATTERN       don't exclude files matching PATTERN 
     --include-from=FILE     read include patterns from FILE 
     --files-from=FILE       read list of source-file names from FILE 
 -0, --from0                 all *from/filter files are delimited by 0s 
     --address=ADDRESS       bind address for outgoing socket to daemon 
     --port=PORT             specify double-colon alternate port number 
     --sockopts=OPTIONS      specify custom TCP options 
     --blocking-io           use blocking I/O for the remote shell 
     --stats                 give some file-transfer stats 
 -8, --8-bit-output          leave high-bit chars unescaped in output 
 -h, --human-readable        output numbers in a human-readable format 
     --progress              show progress during transfer 
 -P                          same as --partial --progress 
 -i, --itemize-changes       output a change-summary for all updates 
     --out-format=FORMAT     output updates using the specified FORMAT 
     --log-file=FILE         log what we're doing to the specified FILE 
     --log-file-format=FMT   log updates using the specified FMT 
     --password-file=FILE    read password from FILE 
     --list-only             list the files instead of copying them 
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second 
     --write-batch=FILE      write a batched update to FILE 
     --only-write-batch=FILE like --write-batch but w/o updating dest 
     --read-batch=FILE       read a batched update from FILE 
     --protocol=NUM          force an older protocol version to be used 
     --checksum-seed=NUM     set block/file checksum seed (advanced) 
 -4, --ipv4                  prefer IPv4 
 -6, --ipv6                  prefer IPv6 
     --version               print version number 
(-h) --help                  show this help (see below for -h comment) 

Rsync can also be run as a daemon, in which case the following options are accepted: 



     --daemon                run as an rsync daemon 
     --address=ADDRESS       bind to the specified address 
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second 
     --config=FILE           specify alternate rsyncd.conf file 
     --no-detach             do not detach from the parent 
     --port=PORT             listen on alternate port number 
     --log-file=FILE         override the "log file" setting 
     --log-file-format=FMT   override the "log format" setting 
     --sockopts=OPTIONS      specify custom TCP options 
 -v, --verbose               increase verbosity 
 -4, --ipv4                  prefer IPv4 
 -6, --ipv6                  prefer IPv6 
 -h, --help                  show this help (if used after --daemon) 






Go Back to:
http://Howes-IT-Going.com

This Webpage and Contents Created by Steven C. Howes © Howes-IT-Going 2000-2012 All rights reserved.