如何将源路径和目标路径作为变量传递给rsync

时间:2019-05-04 19:27:33

标签: linux bash rsync

我正在编写一个bash脚本,以使用rsync将文件从本地计算机复制到远程服务器。我的本地计算机上的文件夹名称“ local folder”中有一个空格;我不知道这有什么区别。

如果我将其写为纯文本,它将起作用:

rsync -arv  --filter=":- .gitignore" /local\ folder/path/ user@123.4.5.6:~/

我想将源路径和目标路径作为变量,但是我无法使其正常工作。我尝试过的第一件事是:

SOURCE="/local\ folder/path/"
DESTINATION="user@123.4.5.6:~/"
rsync -arv  --filter=":- .gitignore" $SOURCE $DESTINATION

我看到此错误:

rsync: change_dir "/local folder/path//~" failed: No such file or directory (2)

这似乎是a)一起运行源和目标,以及b)没有看到服务器地址。

我尝试了多种变体,包括花括号:

rsync -arv  --filter=":- .gitignore" ${SOURCE} ${DESTINATION}

使用引号:

rsync -arv  --filter=":- .gitignore" "${SOURCE}" "${DESTINATION}"

并将选项放入数组:

OPTIONS=( --protect-args -arv --filter=":- .gitignore")
rsync "${OPTIONS[@]}" ${SOURCE} ${DESTINATION}

我已经在https://www.shellcheck.net/中检查了它

#!/bin/bash

SOURCE="/folder name/path"
DESTINATION=user@123.4.5.6:~/

rsync -arv  --filter=":- .gitignore" "$SOURCE" $DESTINATION

还有:

#!/bin/bash

SOURCE="/folder\ name/path"
DESTINATION=user@123.4.5.6:~/

rsync -arv  --filter=":- .gitignore" "$SOURCE" $DESTINATION

每次我都会遇到相同的错误。我在这里错过了什么简单的事情?我看过各种示例,包括:

https://www.redpill-linpro.com/sysadvent/2015/12/03/rsync-tricks.html https://serverfault.com/questions/354112/rsync-and-bash-command-substitution

空间不是问题,或者至少不是唯一的问题。我尝试按照建议的here

在变量名周围使用双引号

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要引用变量:尝试

rsync -arv  --filter=":- .gitignore" "$SOURCE" "$DESTINATION"