hackbyte icon

safe-rsync-foo-(local)v20170415T0540UTC.sh

hackbyte | PRO | 04/15/17 05:41:40 AM UTC | 0 ⭐ | 358 👁️ | Never ⏰ | []
Bash |

17.28 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
export MY_WHICH=`which which`
export MY_RSYNC_BIN=`${MY_WHICH} rsync`
export MY_FSCK_GRACE_TIME="10" ## Grace time in seconds as in having `sleep 1s` running in loop for every count...
export MY_FSCK_LONG_NAME="$0"
export MY_FSCK_SHORT_NAME=`basename ${MY_FSCK_LONG_NAME}`
export MY_FSCK_FUCKUP_BASENAME="safe-rsync-testing-"
export MY_FSCK_FUCKUP_TIMESTAMP=`date "+%Y%m%dT%H%M%S.%N_%Z"`
export MY_FSCK_FUCKUP_PWD="/root/"
export MY_FSCK_FUCKUP_NAME="${MY_FSCK_FUCKUP_PWD}${MY_FSCK_FUCKUP_BASENAM}${MY_FSCK_FUCKUP_TIMESTAMP}"
export MY_FSCK_LOG_FILE="${MY_FSCK_FUCKUP_NAME}.log"
export MY_FSCK_BATCH_FILE="${MY_FSCK_FUCKUP_NAME}_batch"
 
################################################################################
## Some Stuff
 
# The CVSIGNORE environment variable supplements any ignore patterns in .cvsignore files. See the --cvs-exclude option for more details.
unset CVSIGNORE
 
# Specify a default --iconv setting using this environment variable. (First supported in 3.0.0.)
unset RSYNC_ICONV
 
# Specify  a  non-zero  numeric  value if you want the --protect-args option to be enabled by default, or a zero value to make sure that it is disabled by default. (First supported in 3.1.0.)
unset RSYNC_PROTECT_ARGS 
export RSYNC_PROTECT_ARGS=1
 
# The RSYNC_RSH environment variable allows you to override the default shell used as the transport for rsync.  Command line options are permitted after  the  command name, just as in the -e option.
unset RSYNC_RSH
 
# The RSYNC_PROXY environment variable allows you to redirect your rsync client to use a web proxy when connecting to a rsync daemon. You should set RSYNC_PROXY to a hostname:port pair.
unset RSYNC_PROXY 
 
# Setting RSYNC_PASSWORD to the required password allows you to run authenticated rsync connections to an rsync daemon without user intervention.  Note  that  this does not supply a password to a remote shell transport such as ssh; to learn how to do that, consult the remote shell?s documentation.
unset RSYNC_PASSWORD 
 
echo "                \$0 = $0"
echo "                \$* = $*"
echo "                   ($0 $*)"
echo "                \$1 = $1"
echo "                \$2 = $2"
echo "                \$3 = $3"
echo "                \$4 = $4"
echo "                \$5 = $5"
 
echo "MY_FSCK_FUCKUP     = $MY_FSCK_FUCKUP_testing"
echo "MY_FSCK_LONG_NAME  = ${MY_FSCK_LONG_NAME}"
echo "MY_FSCK_SHORT_NAME = ${MY_FSCK_SHORT_NAME}"
 
echo "MY_WHICH           = ${MY_WHICH}"
echo "MY_RSYNC_BIN       = ${MY_RSYNC_BIN}"
 
 
  OUR_RSYNC_OPTS_STRING=""
# OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}"
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--verbose "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--human-readable "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--progress "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--stats "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--itemize-changes "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--one-file-system "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--checksum "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--archive "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--recursive "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--perms "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--executability "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--links "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--copy-unsafe-links "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--times "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--group "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--owner "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--sparse "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--partial "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--acls "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--xattrs "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--hard-links "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--protect-args "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--compress-level=0 "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--no-compress "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--super "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--specials "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--preallocate "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--copy-dirlinks "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--usermap=38242:1975 "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--groupmap=38242:1975 "
  OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--outbuf=block "
##OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--timeout=10 "
##OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--dry-run "
##OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--log-file-format=FMT "
##OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--log-file-format=\"%Y%m%dT%H%M%S.%N_%Z\" "
# OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--log-file=${MY_FSCK_LOG_FILE} "
# OUR_RSYNC_OPTS_STRING="${OUR_RSYNC_OPTS_STRING}--only-write-batch=${MY_FSCK_BATCH_FILE} "
 
OUR_FSCK_FINAL_RSYNC_COMMAND="${MY_RSYNC_BIN} ${OUR_RSYNC_OPTS_STRING}${1} ${2}"
 
echo -e  "\n\n"
echo     "###### DANGER ############ DANGER ############ DANGER ############ DANGER ######"
echo     "#"
echo     "#"
echo     "# executing the following command in ${MY_FSCK_GRACE_TIME} seconds:"
echo     "#"
echo     "#"
echo     ""
echo     "SUPERDATE = %Y%m%dT%H%M%S.%N_%Z"
echo     "SUPERDATE = `date +%Y%m%dT%H%M%S.%N_%Z` (\`date %Y%m%dT%H%M%S.%N_%Z\`)"
echo     ""
echo     "${OUR_FSCK_FINAL_RSYNC_COMMAND}"
echo     ""
echo     ""
echo     "#"
echo     "#"
echo     "# delay for..."
 
echo -en "${MY_FSCK_GRACE_TIME}... "
 
for MY_FSCK_GRACE_TIME_COUNTER in `seq 1 ${MY_FSCK_GRACE_TIME}` ; do
  sleep 1s
  MY_FSCK_GRACE_TIME_COUNTER_REMAINING=$((${MY_FSCK_GRACE_TIME}-${MY_FSCK_GRACE_TIME_COUNTER}))
  echo -en "\n\n${MY_FSCK_GRACE_TIME_COUNTER_REMAINING}... "
done
 
#echo "you got lucky!!!"
echo "let's go!"
 
$OUR_FSCK_FINAL_RSYNC_COMMAND
 
exit 254
 
################################################################################
##       --remove-source-files
##              This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the  transfer  and
##              have been successfully duplicated on the receiving side.
##       -B, --block-size=BLOCKSIZE
##              This  forces  the  block size used in rsync?s delta-transfer algorithm to a fixed value.  It is normally selected based on
##              the size of each file being updated.  See the technical report for details.
 
################################################################################
##       --list-only
##              This option will cause the source files to be listed instead of transferred.  This option is inferred if there is a single
##              source  arg and no destination specified, so its main uses are: (1) to turn a copy command that includes a destination arg
##              into a file-listing command, or (2) to be able to specify more than one source arg (note: be sure to include the  destina?
##              tion).   Caution:  keep  in  mind that a source arg with a wild-card is expanded by the shell into multiple args, so it is
##              never safe to try to list such an arg without using this option.  For example:
##
##                  rsync -av --list-only foo* dest/
##
##              Starting with rsync 3.1.0, the sizes output by --list-only are affected by the --human-readable option.  By  default  they
##              will  contain digit separators, but higher levels of readability will output the sizes with unit suffixes.  Note also that
##              the column width for the size output has increased from 11 to 14 characters for all human-readable levels.  Use --no-h  if
##              you want just digits in the sizes, and the old column width of 11 characters.
##
##              Compatibility  note:   when  requesting  a  remote  listing of files from an rsync that is version 2.6.3 or older, you may
##              encounter an error if you ask for a non-recursive listing.  This is because a file listing implies the --dirs  option  w/o
##              --recursive,  and older rsyncs don?t have that option.  To avoid this problem, either specify the --no-dirs option (if you
##              don?t need to expand a directory?s content),  or  turn  on  recursion  and  exclude  the  content  of  subdirectories:  -r
##              --exclude='/*/*'.
##
##       --bwlimit=RATE
##              This option allows you to specify the maximum transfer rate for the data sent over the socket, specified in units per sec?
##              ond.  The RATE value can be suffixed with a string to indicate a size multiplier, and may  be  a  fractional  value  (e.g.
##              "--bwlimit=1.5m").   If no suffix is specified, the value will be assumed to be in units of 1024 bytes (as if "K" or "KiB"
##              had been appended).  See the --max-size option for a description of all the available suffixes. A value of zero  specifies
##              no limit.
##
##              For  backward-compatibility  reasons, the rate limit will be rounded to the nearest KiB unit, so no rate smaller than 1024
##              bytes per second is possible.
##
##              Rsync writes data over the socket in blocks, and this option both limits the size of the blocks  that  rsync  writes,  and
##              tries  to  keep  the average transfer rate at the requested limit.  Some "burstiness" may be seen where rsync writes out a
##              block of data and then sleeps to bring the average rate into compliance.
##
##              Due to the internal buffering of data, the --progress option may not be an accurate reflection on how  fast  the  data  is
##              being  sent.   This is because some files can show up as being rapidly sent when the data is quickly buffered, while other
##              can show up as very slow when the flushing of the output buffer occurs.  This may be fixed in a future version.
##
##       --write-batch=FILE
##              Record a file that can later be applied to another identical destination with --read-batch. See the "BATCH  MODE"  section
##              for details, and also the --only-write-batch option.
##
##       --only-write-batch=FILE
##              Works  like  --write-batch,  except that no updates are made on the destination system when creating the batch.  This lets
##              you transport the changes to the destination system via some other means and then apply the changes via --read-batch.
##
##              Note that you can feel free to write the batch directly to some portable media: if this media fills to capacity before the
##              end  of  the transfer, you can just apply that partial transfer to the destination and repeat the whole process to get the
##              rest of the changes (as long as you don?t mind a partially updated destination system while the multi-update cycle is hap?
##              pening).
##
##              Also  note that you only save bandwidth when pushing changes to a remote system because this allows the batched data to be
##              diverted from the sender into the batch file without having to flow over the wire  to  the  receiver  (when  pulling,  the
##              sender is remote, and thus can?t write the batch).
##
##       --read-batch=FILE
##              Apply  all of the changes stored in FILE, a file previously generated by --write-batch.  If FILE is -, the batch data will
##              be read from standard input.  See the "BATCH MODE" section for details.
##
##
##       --checksum-seed=NUM
##              Set  the checksum seed to the integer NUM.  This 4 byte checksum seed is included in each block and MD4 file checksum cal?
##              culation (the more modern MD5 file checksums don?t use a seed).  By default the checksum seed is generated by  the  server
##              and  defaults  to  the current time() .  This option is used to set a specific checksum seed, which is useful for applica?
##              tions that want repeatable block checksums, or in the case where the user wants a more random checksum seed.  Setting  NUM
##              to 0 causes rsync to use the default of time() for checksum seed.
##
 
################################################################################
##       --out-format=FORMAT
##              This  allows you to specify exactly what the rsync client outputs to the user on a per-update basis.  The format is a text
##              string containing embedded single-character escape sequences prefixed with a percent (%) character.   A default format  of
##              "%n%L" is assumed if either --info=name or -v is specified (this tells you just the name of the file and, if the item is a
##              link, where it points).  For a full list of  the  possible  escape  characters,  see  the  "log  format"  setting  in  the
##              rsyncd.conf manpage.
##
##              Specifying  the  --out-format  option  implies  the  --info=name option, which will mention each file, dir, etc. that gets
##              updated in a significant way (a transferred file, a recreated symlink/device, or a touched directory).   In  addition,  if
##              the  itemize-changes escape (%i) is included in the string (e.g. if the --itemize-changes option was used), the logging of
##              names increases to mention any item that is changed in any way (as long as the receiving side is at least 2.6.4).  See the
##              --itemize-changes option for a description of the output of "%i".
##
##              Rsync  will  output  the  out-format  string  prior  to  a file?s transfer unless one of the transfer-statistic escapes is
##              requested, in which case the logging is done at the end of the file?s transfer.  When this late logging is in  effect  and
##              --progress is also specified, rsync will also output the name of the file being transferred prior to its progress informa?
##              tion (followed, of course, by the out-format output).
##
 
################################################################################
##
##       --log-file-format=FORMAT
##              This  allows you to specify exactly what per-update logging is put into the file specified by the --log-file option (which
##              must also be specified for this option to have any effect).  If you specify an empty string, updated  files  will  not  be
##              mentioned  in the log file.  For a list of the possible escape characters, see the "log format" setting in the rsyncd.conf
##              manpage.
##
##              The default FORMAT used if --log-file is specified and this option is not is ?%i %n%L?.
##
 
 
################################################################################
 
 
 
 
 
 
################################################################################
# oldoptsfu -valES --no-compress scSrix
##        -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
##          -r, --recursive             recurse into directories
##          -l, --links                 copy symlinks as symlinks
##          -p, --perms                 preserve permissions
##          -t, --times                 preserve modification times
##          -g, --group                 preserve group
##          -o, --owner                 preserve owner (super-user only)
##
##        -v, --verbose               increase verbosity
##        -A, --acls                  preserve ACLs (implies -p)
##        -H, --hard-links            preserve hard links
##        -s, --protect-args          no space-splitting; wildcard chars only
##        -S, --sparse                handle sparse files efficiently
##        -h, --human-readable        output numbers in a human-readable format
##            --progress              show progress during transfer
##            --stats                 give some file-transfer stats
##        -x, --one-file-system       don_t cross filesystem boundaries
##        -c, --checksum              skip based on checksum, not mod-time & size
##            --copy-unsafe-links     only "unsafe" symlinks are transformed
##        -E, --executability         preserve executability
##            --partial               keep partially transferred files
##        -i, --itemize-changes       output a change-summary for all updates
##
##            --log-file=FILE         log what we_re doing to the specified FILE
##            --log-file-format=FMT   log updates using the specified FMT
##
##       --inplace ## potentially dangerous, only for initial copy
##            --numeric-ids           don_t map uid/gid values by user/group name
##            --usermap=STRING        custom username mapping
##            --groupmap=STRING       custom groupname mapping
##            --chown=USER:GROUP      simple username/groupname mapping
##
##  --no-compress
##
##        -z, --compress              compress file data during the transfer
##            --compress-level=NUM    explicitly set compression level
##            --skip-compress=LIST    skip compressing files with suffix in LIST
##
####            --no-OPTION             turn off an implied OPTION (e.g. --no-D)
##            --only-write-batch=/root/hackyshome_rsync.log

Comments