[英]Rsync syntax error when run from bash script
我一直在研究使用rsync进行增量备份的备份脚本。
我已经手动测试了以下rsync命令,它可以正常运行并完成备份:
rsync -aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/
但是,当我在备份脚本中运行同一命令时,出现以下错误:
rsync: -aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/: unknown option
rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]
我在脚本上运行了bash -x,以准确确定发送到控制台的内容以及打印的内容:
+ rsync '-aAXv --delete --progress --link-dest=/backup/Uyuk/Uyuk-backup-part1/2014-02-24/ /mnt/backup/ /backup/Uyuk/Uyuk-backup-part1/2014-02-25/'
有人看到错了吗? 我找不到会导致语法错误的任何内容。
编辑:这是我在脚本中拥有的实际代码,这是一个相当大的脚本,因此,这里没有定义一些变量,但是您明白了。
mkdir -p "/backup/$HOST/$NAME/$TODAY"
#source directory
SRC="$MNT"
#link directory
LNK="/backup/$HOST/$NAME/$LAST/"
#target directory
TRG="/backup/$HOST/$NAME/$TODAY/"
#rsync options
OPT1="-aAXv --delete --progress --link-dest=$LNK"
#run the rsync command
echo "rsync $OPT1 $SRC $TRG"
rsync "$OPT1 $SRC $TRG" > /var/log/backup/backup.rsync.log 2>&1
你是通过你的选项列表作为一个参数,需要时作为参数列表传递它。 通常,如果其中的任何一个包含空格,则应在bash
使用一个数组来保存您的参数。 请尝试以下操作:
mkdir -p "/backup/$HOST/$NAME/$TODAY"
#source directory
SRC="$MNT"
#link directory
LNK="/backup/$HOST/$NAME/$LAST/"
#target directory
TRG="/backup/$HOST/$NAME/$TODAY/"
#rsync options
OPTS=( "-aAXv" "--delete" "--progress" "--link-dest=$LNK" )
#run the rsync command
echo "rsync $OPT1 $SRC $TRG"
rsync "${OPTS[@]}" "$SRC" "$TRG" > /var/log/backup/backup.rsync.log 2>&1
引用时,将数组扩展${OPTS[@]}
特殊地视为一个参数序列,每个参数均被单独引用以保留各个元素中的任何空格或特殊字符。 如果arr=("ab" cd)
,则echo "${arr[@]}"
与
echo "a b" "c" "d"
而不是
echo "a b c d"
这在不支持数组的shell中不起作用,但是后来发明了数组,因为没有一种安全的方法(即不使用eval
)来处理没有它们的用例。
这个:
rsync "$OPT1 $SRC $TRG"
将所有预期的参数传递为一个参数, rsync
不知道如何处理。
尝试以下方法:
rsync ${OPT1} ${SRC} ${TRG}
@chepner建议的方法在我的Mac OS X(10.9.4)上不起作用,但是eval
起作用。
eval rsync "$OPT1 $SRC $TRG"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.