![如何选择性地 rsync 文件夹同时保留树结构?](https://linux22.com/image/744084/%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E6%80%A7%E5%9C%B0%20rsync%20%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%8C%E6%97%B6%E4%BF%9D%E7%95%99%E6%A0%91%E7%BB%93%E6%9E%84%EF%BC%9F.png)
在我的本地机器上我有一个像这样的文件夹结构
/a/b
/a/c
/d/e
/d/f
我想 rsync/a/c
并/d/f
连接到远程服务器,以便之后它具有如下文件夹结构
/a/c
/d/f
我是否必须调用 rsync 两次或者是否有一个选项可以自动保留文件夹结构?
答案1
好问题。您需要使用-R
或--relative
标志。从手册页中:
-R, --relative 使用相对路径。这意味着将命令行上指定的完整路径名而不是仅文件名的最后部分发送到服务器。当您想要同时发送几个不同的目录时,这特别有用。例如,如果您使用此命令:rsync -av /foo/bar/baz.c remote:/tmp/... 这将在远程计算机的 /tmp/ 中创建一个名为 baz.c 的文件。如果您使用 rsync -avR /foo/bar/baz.c remote:/tmp/,则会在远程计算机上创建一个名为 /tmp/foo/bar/baz.c 的文件,并保留其完整路径。这些额外的路径元素称为“隐含目录”(即上例中的“foo”和“foo/bar”目录)。
答案2
要保留目录结构,如上所述,使用 -r 或 --recursive 选项(递归到目录)。
然后由您来决定如何进行选择。使用 -f、-F、--filter、--include 或 --exclude 选项。如果需要,您还可以使用 --inclide-from-file 或 --exclude-from-file,特别是如果您最终得到一个或两个以上的过滤器/包含/排除。