注意,文件夹和ip有obv。已被更改为能够在SO上发布;)
基于以下帖子:Rsync syntax error when run from bash script我构建了以下bash脚本来尝试运行rsync命令..但我无法让事情发挥作用。
通过将选项设置为数组,这不会传递端口号...
#!/bin/bash
options=("-avz" "--delete" "--chmod=ug=rwx,o=rx" "--exclude '.idea*" "--exclude '*.git*" "--exclude 'node-sass'" "-e'ssh -p 44'")
src="/cygdrive/d/Work/site/"
trg="john@12.12.12.12:/var/node/john.site.com/"
rsync "${options[@]}" "$src" "$trg"
或者将选项作为字符串传递..
#!/bin/bash
options="-avz --delete --chmod=ug=rwx,o=rx --exclude '.idea*' --exclude '*.git*' --exclude 'node-sass' -e'ssh -p 44'"
src="/cygdrive/d/Work/site/"
trg="john@12.12.12.12:/var/node/john.site.com/"
rsync "$options" "$src" "$trg"
因为字符串刚刚返回错误:
rsync:-avz --delete --chmod = ug = rwx,o = rx --exclude'.idea *'--exclude ' .git ' - exclude'node-sass'-e'ssh -p 44'#015:未知选项
这是工作rsync:
rysnc -avz --delete --chmod=ug=rwx,o=rx --exclude ".idea*" --exclude "*.git*" --exclude "node-sass" -e "ssh -p 44" /cygdrive/d/Work/site/ john@12.12.12.12:/var/node/john.site.com/
NEW ATTEMPT以下帮助: 我创建了一个ssh配置条目,以绕过将端口号设置为rsync选项的要求,删除所有排除项,输入后他选择使用单引号字符串并通过herestring传递:
#!/bin/bash
opts='-avz --delete --chmod=ug=rwx,o=rx'
src="/cygdrive/d/Work/site/"
trg="john@mysite:/var/node/john.site.com/"
rsync <<<$opts "$src" "$trg"
通过cli的新命令看起来像(并且有效):
rsync -avz --delete --chmod=ug=rwx,o=rx /cygdrive/d/Work/site/ john@mysite:/var/node/john.site.com/
但我明白了:
rsync: link_stat "/cygdrive/d/Work/site/\#015" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]
答案 0 :(得分:2)
引用时不要重新分组选项。试试这个:
options=(-avz --delete --chmod=ug=rwx,o=rx --exclude ".idea*" --exclude "*.git*" --exclude "node-sass" -e "ssh -p 44")
src=/cygdrive/d/Work/site/
trg="john@87.87.87.87:/var/node/john.site.com/"
rsync "${options[@]}" "$src" "$trg"
答案 1 :(得分:-2)
导致问题的微妙问题是-e "ssh -p 44"
选项。使用-e
或--rsh=COMMAND
:
COMMAND中允许使用命令行参数 作为单个参数呈现给rsync。
将-e "ssh -p 44"
移出选项字符串可以使其按预期工作。数组方法如下:
opts=( -avz --delete --chmod=ug=rwx,o=rx --exclude '.idea*' --exclude '*.git*' --exclude node-sass )
正如评论中所提到的,从最佳实践的角度来看,不建议使用单个变量。但是,您可以确认以下内容也适用:
opts='-avz --delete --chmod=ug=rwx,o=rx --exclude .idea* --exclude *.git* --exclude node-sass'
您可以按照自己喜欢的方式指定来源和目的地:
src="/cygdrive/d/Work/site/"
dest="john@12.12.12.12:/var/node/john.site.com/"
使用选项数组的rsync
调用变为:
rsync ${opts[@]} -e "ssh -p 44" "$src" "$dest"
或者,出于测试目的,您可以使用单个变量,如下所示:
rsync $opts -e "ssh -p 44" "$src" "$dest"
ssh
配置为使用port 44
用于主机12.12.12.12
注意:如果您定期与12.12.12.12
port 44
进行通信,则更有意义提供~/.ssh/config
ssh
rsync
12.12.12.12
port 44
HOST
PORT
~/.ssh/config
Host 12.12.12.12
Port 44
-e "ssh -p 44"
的{{1}} { new FileWriter(..)
中的FileReader
file1
配置格式就是:
file2
创建或编辑文件,添加上述选项,然后您可以完全删除file1
选项。