如何使用rsync排除包含空格的数组中的所有内容?

3

目录:

$ 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" 这个空格就可以了。

1个回答

4
您的rsync操作中实际缺少引号:
rsync -avR --delete "${INCLUDE[@]}" "${EXCLUDE[@]}" "${SOURCE}" "${TARGET}"
#...................^.............^.^.............^

将Bash扩展为其元素对于IT技术至关重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接