rsync только каталоги, которые существуют? - PullRequest
0 голосов
/ 09 августа 2011

На моей локальной машине у меня есть несколько плагинов, а на сервере их несколько.

Локальная машина:

~/wp-content/plugins/plugin1
~/wp-content/plugins/plugin1/includes
~/wp-content/plugins/plugin2
~/wp-content/plugins/plugin3
~/wp-content/plugins/plugin4
~/wp-content/plugins/plugin5

Удаленная машина:

~/wp-content/plugins/plugin1
~/wp-content/plugins/plugin1/includes
~/wp-content/plugins/plugin3
~/wp-content/plugins/plugin5

Какую команду rsync я могу использовать для обновления всех файлов в удаленных каталогах, но только если они существуют?Для этого я бы хотел синхронизировать plugin1, plugin1 / includes, plugin3 и plugin5 - со всеми файлами и каталогами внутри - но не с plugin2 или plugin4.По сути, обновите все плагины, если они существуют, с помощью одной команды rsync.

1 Ответ

1 голос
/ 16 августа 2011

Это не полностью возможно только с одной командой rsync. Если вы хотите обновить удаленные файлы, но не хотите добавлять новые файлы, вы можете использовать эту команду:

rsync -rP --existing source/ user@remote:target/

Это вообще не создаст новые файлы или каталоги, но обновит другие.

Редактировать : Может быть, вы могли бы сделать что-то подобное (предполагая, что GNU find, если BSD / OS X: замените maxdepth на глубину):

#!/bin/bash
REMOTE_TARGET_DIR=/some/path
REMOTE_DIRS=$(ssh user@remote "find $REMOTE_TARGET_DIR -maxdepth 1 -type d -printf '%P\n' | sed 1d"
for DIR in $REMOTE_DIRS
do
  rsync -rP "$DIR" "user@remote:$REMOTE_TARGET_DIR/"
done

Предупреждение : Я не проверял это, вы можете добавить «-n» в rsync (пробный запуск), чтобы увидеть, что происходит.

...