Rsync复制了太多通过bash脚本执行的目录

Rsync复制了太多通过bash脚本执行的目录,bash,rsync,Bash,Rsync,最初我想同步bash脚本中参数中给定的目录(包括所有文件和子目录) 我发现了这篇文章:它解释了在类似情况下如何使用rsync 我的bash脚本非常简单,如下所示: #!/bin/bash echo -e "Type the project to be deployed: \c " read project echo -e "* Deploying: $project *" echo -e "Sync: /var/repo/released/$project" echo -e "

最初我想同步bash脚本中参数中给定的目录(包括所有文件和子目录)

我发现了这篇文章:它解释了在类似情况下如何使用rsync

我的bash脚本非常简单,如下所示:

#!/bin/bash
echo -e "Type the project to be deployed: \c "
read project
echo -e "* Deploying: $project *"    
echo -e "Sync: /var/repo/released/$project"
echo -e "      /var/www/released/$project"

rsync -pr /var/repo/released/$project /var/www/released/$project
因此,它复制了/release中的所有内容(其中有许多目录,比如-projects-)

我只想复制(同步)参数中给出的项目


您可以建议如何执行此操作吗?

当您在没有参数的情况下调用脚本时(这很可能是您正在执行的操作,因为您以交互方式将项目名称读入变量
$project
),位置参数
$1
仍为空。因此,脚本将
rsync
包含
/var/repo/released/
的全部内容

您需要将脚本中的
$1
替换为
$project
。另外,我建议在路径周围加上双引号,以避免由于目录名中的空格而导致的问题

rsync -pr "/var/repo/released/$project" "/var/www/released/$project"

当您在没有参数的情况下调用脚本时(这很可能是因为您以交互方式将项目名称读入变量
$project
),位置参数
$1
保持为空。因此,脚本将
rsync
包含
/var/repo/released/
的全部内容

您需要将脚本中的
$1
替换为
$project
。另外,我建议在路径周围加上双引号,以避免由于目录名中的空格而导致的问题

rsync -pr "/var/repo/released/$project" "/var/www/released/$project"

这就是原因,引号是+$project而不是$1这就是原因,引号是+$project而不是$1