我想将的内容复制"src/main/resources/"
到我的远程服务器。此文件夹包含几个*properties
文件。
以下命令在 bash 和 zsh 中执行没有任何问题:
rsync -av "src/main/resources/*" "[email protected]:/home/azureuser"
但是,在 shell 脚本中执行此类命令时,我收到以下错误。我认为这是由于*
shell 中的扩展造成的。
rsync: link_stat "/home/marcos/Desenvolvimento/Java/EXT-Hyuga/src/main/resources/*" failed: No such file or directory (2)
我该如何修复此问题?
Shell脚本内容:
#!/bin/bash
# server array
declare -a deployinstances=("s1" "s2" "s3" "s4")
## looping trough deploy instances
for di in "${deployinstances[@]}"
do
rsync -av "src/main/resources/*" "azureuser@$di.cloudapp.net:/home/azureuser"
done
答案1
您的第一个命令,即您直接在命令行中运行的命令也不起作用。
在bash
(以及所有其他 shell)中,当将标记(例如*
,?
,[]
)放在引号(双引号和单引号)内时,不会进行文件名生成(又称为路径名扩展或 glob 扩展),因为在对任何单词进行路径名扩展后,shell 都会删除引号,因此该单词将按字面意思处理。
因此,您需要保持*
在引号之外:
rsync -av src/main/resources/* azureuser@"$di".cloudapp.net:/home/azureuser/
我没有在任何路径名中使用任何引号,因为除非路径中有空格,否则不需要在路径周围使用引号。