michael
2008-Sep-23 21:38 UTC
help required for passing parameters to rsync within a script
I'm attempting to write a short script to copy all 'CONC*' files in any subdir under ./ using rsync and filters but I can't get the correct quoting/escaping... any ideas? eg cmd line (all on a single line): /home/horace/mccssmb2/src/rsync-2.6.9__icc/rsync --times --links -z --progress --stats -v -rP --filter='+ */' --filter='+ CONC*' --filter='- *' . michael@ratty.phy.umist.ac.uk:/data_hdd1/michael/`basename $PWD` but I can't see how to sort FILTER in this bash script such that + and */ all work properly... ta, Michael # cmd - need newer than system rsync RSYNC_EXE=${HOME}/src/rsync-2.6.9__icc/rsync RSYNC_CMDS='--times --links -z --progress --stats -v --dry-run -rP' # source top-level SRC=. # from here down # dest (remote) DEST=michael@ratty.phy.umist.ac.uk:/data_hdd1/michael/`basename $PWD` # ensure in same dir on remote # filter: all subdirs but only CONC* files FILTER="--filter=+ \* --filter=+ CONC\* --filter=- \*" echo $FILTER set -x ${RSYNC_EXE} ${RSYNC_CMDS} ${FILTER} ${SRC} ${DEST}
Matt McCutchen
2008-Sep-24 00:40 UTC
help required for passing parameters to rsync within a script
On Tue, 2008-09-23 at 22:22 +0100, michael wrote:> I'm attempting to write a short script to copy all 'CONC*' files in any > subdir under ./ using rsync and filters but I can't get the correct > quoting/escaping... any ideas?> # filter: all subdirs but only CONC* files > FILTER="--filter=+ \* --filter=+ CONC\* --filter=- \*" > echo $FILTER > set -x > ${RSYNC_EXE} ${RSYNC_CMDS} ${FILTER} ${SRC} ${DEST}The trouble is that, when you expand ${FILTER} outside of double quotes, bash will split on all spaces in the value, which cuts each filter rule in two. To fix this, you can use an underscore instead of a space to separate the +/- symbol from the pattern, or you can switch to bash arrays as shown here (but omit the colon before "${COMMAND[@]}" !): http://lists.samba.org/archive/rsync/2008-August/021580.html Matt