2009-11-25 4 views
4

ОК, я, вероятно, не первый человек, пытающийся объединить веб-интерфейс PHP с rsync для упрощения развертывания, но это происходит.Синхронизация rsync, опуская каталоги

У нас есть сервер «QA» локально и сервер «Staging» в Rackspace. Я установил пары ключей SSH, чтобы я мог rsync между двумя серверами, и все это отлично работает. Проблема в том, что rsync немного шелушится относительно того, что он решает, нуждается в обновлении.

Сценарий, который я написал, сначала выполняет rsync с параметром «-dry-run», чтобы получить список всего, что необходимо для переноса. Команда выглядит следующим образом:

$strCheck = shell_exec(
         "rsync " . 
         "--verbose " . 
         "--recursive " . 
         "--safe-links " . 
         "--checksum " . 
         "--dry-run " . 
         "--delete " . 
         "--delete-excluded " . 
         "--force " . 
         "--cvs-exclude " . 
         "--human-readable " . 
         "/apps/{$system}/ " . 
         "[email protected]:/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, где я могу заставить его включить папку для любых обновленных файлов, или мне придется добавить их, когда я прохожу через массив? Если это последний, какой был бы лучший способ сделать это?

Помощи мне Обь Stack Overflowbi, ты моя единственная надежда ...

+0

stack obiflow kenobi? – falstro

+1

+1 за качество и тему вопроса, а также за смешную ссылку. –

ответ

2

Поскольку каталог не должна быть создана или удалена будет отсутствовать возвращается список Rsync. Я не верю, что это можно исправить.

Я думаю, что вам лучше всего было бы, чтобы получить трактов что-то вроде этого

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

Где $ имя_файла это имя файла.

+0

Приветствия за ваш ответ. Похоже, в rsync нет никакого способа сделать это. –