我有以下for循环,循环遍历所有需要复制的给定源。
for i in "${sources[@]}"; do
exclude="--exclude 'exclude_folder/exclude_file'"
rsync -az $exclude $i $destination
done
但是,排除选项无效。
for i in "${sources[@]}"; do
exclude="--exclude 'exclude_folder/exclude_file'"
rsync -az "$exclude" "$i" "$destination"
done
如果我使用上面的代码,rsync将退出并给出一个错误,它是一个未知的选项。
如果我只是使用以下代码,它可以工作,但我想使用一个变量作为exclude选项。
for i in "${sources[@]}"; do
rsync -az --exclude 'exclude_folder/exclude_file' $i $destination
done
答案 0 :(得分:0)
要排除的示例列表目录(也是野外图):
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
rsync -az --exclude /$d/ .....
done
答案 1 :(得分:-1)
我会使用eval
。
您的代码:
for i in "${sources[@]}"; do
exclude="--exclude 'exclude_folder/exclude_file'"
rsync -az "$exclude" "$i" "$destination"
done
然后(我试图尽可能接近你的逻辑):
for i in "${sources[@]}"; do
exclude="--exclude 'exclude_folder/exclude_file'"
rsync_command="rsync -az $exclude $i $destination"
eval rsync_command
done
来自eval
手册页:
EVAL
评估几个命令/参数
语法 eval [arguments]
将参数连接在一起成为一个命令 然后读取并执行,退出状态作为退出返回 评估状态。如果没有参数或只有空参数,那么 退货状态为零。
eval是一个POSIX`特殊'内置
修改强>
戈登戴维森对eval
中的错误/不安全感是正确的。如果有任何其他解决方案可用,那么最好使用它。这里的bash数组更好。阵列答案是最好的答案。
上查看答案