rsync 是否可以配置为避免修改源文件夹中找不到的子目录?

rsync 是否可以配置为避免修改源文件夹中找不到的子目录?

我很难弄清楚如何运行 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.confrsync

相关内容