Originally Posted by
Paddy Landau
What can I say? It doesn't!
I tried both with and without the quotation marks.
It works fine on my end. Here it is a proof of concept case:
Code:
$ ll
total 24
drwxrwxr-x 2 miri miri 4096 Jul 10 20:12 d1
drwxrwxr-x 2 miri miri 4096 Jul 10 20:35 d2
drwxrwxr-x 2 miri miri 4096 Jul 10 20:28 'dir 1'
drwxrwxr-x 3 miri miri 4096 Jul 10 20:31 'dir 2'
-rwxr-x--- 1 miri miri 190 Jul 10 20:30 rs
-rwxr-x--- 1 miri miri 211 Jul 10 20:31 rs_1
miri@miri-IdeaPad-3:~/Temporary$
miri@miri-IdeaPad-3:~/Temporary$
miri@miri-IdeaPad-3:~/Temporary$ ll d1
total 0
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_1
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_2
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_3
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_4
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_5
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 b_1
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 b_2
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 b_3
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 b_4
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 b_5
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 c_1
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 c_2
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 c_3
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 c_4
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 c_5
miri@miri-IdeaPad-3:~/Temporary$
miri@miri-IdeaPad-3:~/Temporary$ ll d2
total 0
miri@miri-IdeaPad-3:~/Temporary$
Script below:
Code:
#!/bin/bash
set -x
if true
then
EXCLUDE=( --exclude=d1/b_* --exclude=d1/c_* )
else
EXCLUDE=''
fi
rsync -avz "${EXCLUDE[@]}" d1 d2
## Or with the array values spelled out:
# rsync -avz "${EXCLUDE[0]}" "${EXCLUDE[1]}" d1 d2
After running the above script:
Code:
$ ./rs
+ true
+ EXCLUDE=(--exclude=d1/b_* --exclude=d1/c_*)
+ rsync -avz '--exclude=d1/b_*' '--exclude=d1/c_*' d1 d2
sending incremental file list
d1/
d1/a_1
d1/a_2
d1/a_3
d1/a_4
d1/a_5
sent 324 bytes received 115 bytes 878.00 bytes/sec
total size is 0 speedup is 0.00
miri@miri-IdeaPad-3:~/Temporary$
miri@miri-IdeaPad-3:~/Temporary$ ll d2/d1/
total 0
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_1
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_2
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_3
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_4
-rw-rw-r-- 1 miri miri 0 Jul 10 20:08 a_5
miri@miri-IdeaPad-3:~/Temporary$
If the directories' names contain whitespaces quote them like so:
Code:
#!/bin/bash
set -x
if true
then
EXCLUDE=( --exclude="dir 1"/b_* --exclude="dir 1"/c_* )
else
EXCLUDE=''
fi
rsync -avz "${EXCLUDE[@]}" "dir 1" "dir 2"
This is just a simple test to prove that arrays are the way to go. For your needs modify the rsync and EXCLUDE command in the script.
Bookmarks