【问题标题】:Rsync copies too many directories being executed via bash scriptRsync 复制了太多通过 bash 脚本执行的目录
【发布时间】:2013-05-20 12:36:27
【问题描述】:

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

我找到了这篇文章:How can I recursively copy a directory into another and replace only the files that have not changed?,它解释了如何在类似情况下使用 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

因此它会复制 /released 中的所有内容(那里有很多目录,比如说 -projects-)。

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

您能否建议如何做到这一点?

【问题讨论】:

    标签: bash rsync


    【解决方案1】:

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

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

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

    【讨论】:

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