diff options
author | Wayne Davison <wayne@opencoder.net> | 2021-11-13 09:30:08 -0800 |
---|---|---|
committer | Wayne Davison <wayne@opencoder.net> | 2021-11-13 10:39:09 -0800 |
commit | 1f0e62f139565f39020e1f76700828b415b01bcf (patch) | |
tree | e1675ded509de2709d7b16cf1960c68df6c570b4 /support | |
parent | 7d830ff52ff7b01f528f39aa27b1ab36ea8c1356 (diff) | |
download | rsync-1f0e62f139565f39020e1f76700828b415b01bcf.tar.gz |
Improve a couple support scripts:
- rsync-no-vanished now avoids joining stdout & stderr, avoids affecting
a non-client run, and gets the rsync status code correctly.
- rsync-slash-strip now avoids affecting a non-client run.
Diffstat (limited to 'support')
-rwxr-xr-x | support/rsync-no-vanished | 13 | ||||
-rwxr-xr-x | support/rsync-slash-strip | 9 |
2 files changed, 19 insertions, 3 deletions
diff --git a/support/rsync-no-vanished b/support/rsync-no-vanished index 0f0bb22f..b31a5d21 100755 --- a/support/rsync-no-vanished +++ b/support/rsync-no-vanished @@ -1,12 +1,21 @@ #!/usr/bin/env bash +REAL_RSYNC=/usr/bin/rsync IGNOREEXIT=24 IGNOREOUT='^(file has vanished: |rsync warning: some files vanished before they could be transferred)' +# If someone installs this as "rsync", make sure we don't affect a server run. +for arg in "${@}"; do + if [[ "$arg" == --server ]]; then + exec $REAL_RSYNC "${@}" + exit $? # Not reached + fi +done + set -o pipefail -rsync "${@}" 2>&1 | (grep -E -v "$IGNOREOUT" || true) -ret=$? +# This filters stderr without merging it with stdout: +{ $REAL_RSYNC "${@}" 2>&1 1>&3 3>&- | grep -E -v "$IGNOREOUT"; ret=${PIPESTATUS[0]}; } 3>&1 1>&2 if [[ $ret == $IGNOREEXIT ]]; then ret=0 diff --git a/support/rsync-slash-strip b/support/rsync-slash-strip index 2869e45c..b57e61c5 100755 --- a/support/rsync-slash-strip +++ b/support/rsync-slash-strip @@ -6,12 +6,19 @@ # # To use this, name it something like "rs", put it somewhere in your path, and # then use "rs" in place of "rsync" when you are typing your copy commands. + +REAL_RSYNC=/usr/bin/rsync + args=() for arg in "${@}"; do + if [[ "$arg" == --server ]]; then + exec $REAL_RSYNC "${@}" + exit $? # Not reached + fi if [[ "$arg" == / ]]; then args=("${args[@]}" /) else args=("${args[@]}" "${arg%/}") fi done -exec /usr/bin/rsync "${args[@]}" +exec $REAL_RSYNC "${args[@]}" |