Reputation: 12312
Directories:
$ cd /source/xxx/ && find deleteme/
deleteme/
deleteme/file
deleteme/ex me
deleteme/ex me/nono
deleteme/ex me/nono/a
deleteme/ex me/touch
Script:
#!/bin/bash
SOURCE=/source/xxx/deleteme/
TARGET=/media/xxx/
EXCLUDE=("ex me/*")
INCLUDE=("ex me/touch")
for i in "${!EXCLUDE[@]}"
do
EXCLUDE[i]="--exclude=${EXCLUDE[i]}"
done
for i in "${!INCLUDE[@]}"
do
INCLUDE[i]="--include=${INCLUDE[i]}"
done
rsync -avR --delete ${INCLUDE[@]} ${EXCLUDE[@]} "${SOURCE}" "${TARGET}"
Result:
$ cd /media/xxx/ && find deleteme/
deleteme/
deleteme/ex me
deleteme/ex me/nono
deleteme/ex me/nono/a
deleteme/ex me/touch
deleteme/file
Expected Result:
$ cd /media/xxx/ && find deleteme/
deleteme/
deleteme/ex me
deleteme/ex me/touch
deleteme/file
Question
How to get expected result?
Without the space "exme" it works.
Upvotes: 3
Views: 1574
Reputation: 247210
You're missing quotes on the actual rsync invocation:
rsync -avR --delete "${INCLUDE[@]}" "${EXCLUDE[@]}" "${SOURCE}" "${TARGET}"
#...................^.............^.^.............^
That is crucial to get bash to expand the array into its elements.
Upvotes: 4