![rsync 是否可以配置为避免修改源文件夹中找不到的子目录?](https://linux22.com/image/58386/rsync%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%85%8D%E7%BD%AE%E4%B8%BA%E9%81%BF%E5%85%8D%E4%BF%AE%E6%94%B9%E6%BA%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%89%BE%E4%B8%8D%E5%88%B0%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我很难弄清楚如何运行 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