rsync,删除在发送端删除的接收端文件。(但不要删除所有内容)

Hea*_*ler 9 rsync

我想使用 rsync 来...

  • 删除在接收端也被发送端删除的文件
  • 不删除接收方 rsynced 目录中的其他文件

例如,假设我有一个目录local-src

之前: local-src本地包含...

a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)

我想要同步到 to 内容的远程目录local-src称为remote-src.

之前: remote-src远程包含...

a.txt
b.txt
c.txt
d.txt
README.md
Run Code Online (Sandbox Code Playgroud)

假设我删除了一些文件local-src

本地删除后: local-src本地包含...

c.txt
Run Code Online (Sandbox Code Playgroud)

如何以某种方式使用 rsync 以确保在源处删除的文件也在目标处删除,但不删除目标处的其他文件。例如,我想在目的地有以下内容:

本地删除后: remote-src远程包含...

c.txt
d.txt
README.md
Run Code Online (Sandbox Code Playgroud)

也就是说,a.txtb.txt也被远程删除,但d.txtREADME.txt被单独留下。

有没有办法用 rsync 实现这一点?

编辑:结论似乎是 rsync 这可能是不可能的。有人问我为什么需要这个,所以为了说明我的用例:

假设我有一个网络服务器。在那个 web 服务器上,我有一堆目录,假设我有一个目录A和一个public_html目录,我的网站是从那里提供的。假设我有一些在目录中生成文件的自动化过程A。我想rsync的(或使用其他工具同步)产生或文件更新Apublic_html目录,而不删除其他任意文件,可能是内public_html。我当然不希望 rsync 意外删除我的网站。

如果 rsync 不是这项工作的工具,其他人知道我该怎么做吗?

Spa*_*ack 0

如果我理解正确,那么--exclude可能就是您正在寻找的:

$ ls src dst
dst:
a.txt  b.txt  c.txt  d.txt  README.md

src:
c.txt
$ rsync --update --delete --recursive --exclude="d.txt" --exclude="README.md" src/ dst
$ ls src dst
dst:
c.txt  d.txt  README.md

src:
c.txt
Run Code Online (Sandbox Code Playgroud)