【问题标题】:rsync synchronisation omitting directoriesrsync 同步省略目录
【发布时间】:2009-11-25 13:08:50
【问题描述】:

好吧,我可能不是第一个尝试将基于 PHP 的 Web 界面与 rsync 放在一起以简化部署的人,但还是成功了。

我们在本地有一个“QA”服务器,在 Rackspace 有一个“Staging”服务器。我已经设置了 SSH 密钥配对,所以我可以在两台服务器之间进行 rsync 并且一切正常。问题是 rsync 对于它决定需要更新的内容有点不稳定。

我编写的脚本首先使用“--dry-run”参数执行 rsync,以获取需要传输的所有内容的列表。命令如下:

$strCheck = shell_exec(
                       "rsync " .
                       "--verbose " .
                       "--recursive " .
                       "--safe-links " .
                       "--checksum " .
                       "--dry-run " .
                       "--delete " .
                       "--delete-excluded " .
                       "--force " .
                       "--cvs-exclude " .
                       "--human-readable " .
                       "/apps/{$system}/ " .
                       "user@liveserver:/apps/{$system}_staging/"
                       );

现在一切正常,我可以将返回的字符串解析为需要删除的内容和需要添加/更新的内容。然后,我构建了一个 HTML 表,它会根据每个复选框在层次结构中的位置自动缩进它。我还使用了一些 javascript,因此我可以允许用户选择文件夹中的所有文件。

如果要添加/删除文件夹本身,则将其包含在列表中。例如:

/newfolder/
/newfolder/file1.php
/newfolder/file2.php

这很好,因为 '/newfolder/' 将显示一个缩进,而 '/newfolder/file1.php' 和 '/newfolder/file2.php' 将分别在 '/newfolder/' 下面显示两个缩进. “/newfolder/”旁边的复选框会自动选中两个“子”文件,大家都很高兴。

但是,如果只是将文件添加/更新到文件夹中,则会忽略文件夹本身:

/oldfolder/filea.php
/oldfolder/fileb.php

...

这意味着 '/oldfolder/' 中的所有文件都有两个缩进,但没有可见的机制来选择文件夹中的所有文件。

所以我的问题是:我在可用的 rsync 参数中是否缺少某些东西,我可以强制它包含任何更新文件的文件夹,还是我必须在循环遍历数组时添加它们?如果是后者,最好的方法是什么?

Obi Stack Overflowbi 帮帮我,你是我唯一的希望...

【问题讨论】:

  • +1 表示问题的质量和主题,以及荒谬的参考。

标签: php shell rsync


【解决方案1】:

由于该目录不需要创建或删除,它会从 rsync 返回的列表中丢失。我不相信有什么办法可以解决这个问题。

我认为你最好的选择是获得类似这样的路径

$path = explode(PATH_SEPARATOR, dirname($filename) );

其中 $filename 是您的文件名。

【讨论】:

  • 为您的回答干杯。看起来在 rsync 中没有办法做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多