变量中的rsync选项

时间:2010-09-13 04:54:48

标签: bash shell rsync

我想将rsync的命令选项放入变量中,以便我可以将其重用于其他rsync命令。这是我尝试的但是没有用。

roption="-a --recursive --progress --exclude='class' --delete --exclude='exclude' --exclude='.svn' --exclude='.metadata' --exclude='*.class'"
rsync "$roption" /media/CORSAIR/workspace ~/

任何人都能帮我解决问题吗?

谢谢,

3 个答案:

答案 0 :(得分:15)

使用shell数组。如果你想使用转义形成字符串并使它们按字面意思输入,那么它们非常有用。另外,安全。

roption=(
    -a
    --recursive
    --progress
    --exclude='class'
    --delete
    --exclude='exclude'
    --exclude='.svn'
    --exclude='.metadata'
    --exclude='*.class'
)

rsync "${roption[@]}" /media/CORSAIR/workspace ~/

您甚至可以添加它们:

if [ "$VERBOSE" -ne 0 ]; then
    roption+=(--verbose)
fi

答案 1 :(得分:1)

由于您的$roption代表多个参数,因此您应该使用$roption,而不是"$roption"

当然,使用标量来保存多个值是错误的。如果您使用bash,请考虑使用数组:

roptions=(-a --recursive --progress --exclude='class' --delete --exclude='exclude' --exclude='.svn' --exclude='.metadata' --exclude='*.class')
rsync "${roptions[@]}" /media/CORSAIR/workspace ~

答案 2 :(得分:-2)

你可以试试'eval'命令,它会要求shell在eval解释它之前解析一次命令行:

roption="-a --recursive --progress --exclude='class' --delete --exclude='exclude' --exclude='.svn' --exclude='.metadata' --exclude='*.class'" 

eval "rsync $roption /media/CORSAIR/workspace ~"