我很难弄清楚如何运行 rsync 来让它做我需要它做的事情。基本上我需要的是如下给出的具有多个子目录的单个源文件夹:
-如果文件对于源文件夹中给定的子目录的更改,将这些更改同步到目标(更新文件并删除源文件夹中不再找到的文件)。
-如果一个文件夹在源中找到但在目标中未找到,则将该文件夹及其所有内容同步到目标。
-如果一个文件夹在目标中找到但在源中未找到,则不执行任何操作(例如,不要删除它)。
目录结构如下所示:
Source Folder
Folder 1
File 1 unchanged.txt
Folder 2
File 2 newer.txt
Folder 3
File 3.txt
Destination Folder
Folder 1
File 1 unchanged.txt
Folder 2
File 2 old.txt (to be replaced with File 2 newer.txt)
(Folder 3 not yet in destination, to be added from source)
Folder X (not in source, to be left untouched)
答案1
根据 man rsync 你可以使用:
--exclude=PATTERN
或者您的列表太大,您可以使用:
--exclude-from=FILE
答案2
您所描述的是 rsync 的默认标准行为。
如果您想要不同的行为,则必须使用其中一个--delete
选项。
这是一个证明我的观点的测试:
$ mkdir tmp1
$ mkdir tmp2
$ mkdir tmp1/1
$ mkdir tmp1/2
$ mkdir tmp2/1
$ mkdir tmp2/X
$ touch tmp1/1/1.txt
$ touch tmp1/2/2.txt
$ rsync -avz tmp1 tmp2
sending incremental file list
tmp1/
tmp1/1/
tmp1/1/1.txt
tmp1/2/
tmp1/2/2.txt
sent 208 bytes received 62 bytes 540.00 bytes/sec
total size is 0 speedup is 0.00
$ ls tmp2
1 tmp1 X
您可以看到目录 X 在那里,未受影响。
如果您将其用作守护程序,则可能rsync
正在应用配置文件中的选项。
查看是否在此处或正在启动的用户的主目录中/etc/rsyncd.conf
设置了任何删除选项rsyncd.conf
rsync