【问题标题】:How to pass source and destination paths to rsync as variables [duplicate]如何将源路径和目标路径作为变量传递给rsync
【发布时间】:2019-05-04 19:27:33
【问题描述】:

我正在编写一个 bash 脚本来使用 rsync 将文件从我的本地机器复制到远程服务器。我本地机器上的文件夹名称“本地文件夹”中有一个空格;我不知道这是否有什么不同。

如果我把它写成纯文本,它可以工作:

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的建议在我的变量名周围使用双引号

谢谢!

【问题讨论】:

标签: linux bash rsync


【解决方案1】:

你需要引用你的变量:试试

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

【讨论】:

  • NMDV,但请注意How to Answer 中的“回答好问题”部分,以及其中关于“之前已经被多次询问和回答过”的问题的要点。
  • 谢谢,我尝试添加引号,但没有任何区别。我已经注意到我在问题中尝试过的额外内容。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多