我正在编写一个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
在变量名周围使用双引号谢谢!
答案 0 :(得分:0)
您需要引用变量:尝试
rsync -arv --filter=":- .gitignore" "$SOURCE" "$DESTINATION"