2014-01-18 2 views
2

Справочники:rsync как исключить все в массиве с пробелами?

$ cd /source/xxx/ && find deleteme/ 
deleteme/ 
deleteme/file 
deleteme/ex me 
deleteme/ex me/nono 
deleteme/ex me/nono/a 
deleteme/ex me/touch 

Сценарий:

#!/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}" 

Результат:

$ cd /media/xxx/ && find deleteme/ 
deleteme/ 
deleteme/ex me 
deleteme/ex me/nono 
deleteme/ex me/nono/a 
deleteme/ex me/touch 
deleteme/file 

Ожидаемый результат:

$ cd /media/xxx/ && find deleteme/ 
deleteme/ 
deleteme/ex me 
deleteme/ex me/touch 
deleteme/file 

Вопрос

Как получить ожидаемый результат?

Без пространства «exme» это работает.

ответ

3

Вы упускаете цитаты о фактическом RSync вызова:

rsync -avR --delete "${INCLUDE[@]}" "${EXCLUDE[@]}" "${SOURCE}" "${TARGET}" 
#...................^.............^.^.............^ 

Это очень важно, чтобы Баш расширить массив в своих элементов.

+0

Спасибо, что работает! – Stuck

Смежные вопросы