rsync只存在目录?

时间:2011-08-09 17:13:47

标签: linux unix rsync

在我的本地计算机上,我有几个插件,在服务器上我有一些插件。

本地机器:

~/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 个答案:

答案 0 :(得分:1)

仅使用一个rsync命令就不可能完全实现这一点。如果您只想更新远程文件,但又不想添加 new 文件,则可以使用以下命令:

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

这根本不会创建新文件或目录,而是更新不同的文件或目录。

编辑:也许你可以这样做(假设GNU找到,如果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

警告:我没有对此进行测试,您可能需要在rsync(干运行)中添加“-n”以查看会发生什么。