尝试使用 shell 脚本中的 rsync 复制目录内容时出错

尝试使用 shell 脚本中的 rsync 复制目录内容时出错

我想将的内容复制"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/

我没有在任何路径名中使用任何引号,因为除非路径中有空格,否则不需要在路径周围使用引号。

相关内容