使用 rsync 复制时按名称排除现有文件

使用 rsync 复制时按名称排除现有文件

我正在执行以下两个rsync命令。在第一个命令中,我将文件从源复制到目标,然后在第二个命令中检查文件并删除源中的文件。

rsync --info=progress2 -r /local/data/ /import/myNAS/data
rsync --info=progress2 -r --checksum --remove-source-files /local/data/ /import/myNAS/data

我只想将目标中不存在的文件从源复制并删除到目标。我可以使用该--ignore-existing标志来执行此操作,但使用该标志文件会在较新时进行复制。我想只检查名称而不是时间戳。这意味着当目标中存在同名文件时,不应从源中复制该文件,也不应从源中删除该文件。

这可能吗?

答案1

您的描述与应有的工作方式不符--ignore-existing。它确实应该防止复制目标上已存在的(甚至较新的)文件。

$ rsync -a a/ b/
$ touch a/new a/update
$ rsync -ai --ignore-existing a/ b/
.d..t....... ./
>f++++++++++ new
$ ls -ln */{new,update}
-rw-r--r--  1 34570  344586812  0 Aug 17 14:50 a/new
-rw-r--r--  1 34570  344586812  7 Aug 17 14:50 a/update
-rw-r--r--  1 34570  344586812  0 Aug 17 14:50 b/new
-rw-r--r--  1 34570  344586812  7 Mar 26 17:02 b/update

a/update现在有更新的时间戳,但 rsync 不会更新。

您可以尝试再次运行 rsync,但添加标志-i并显示现有文件的输出吗?由于复制的原因,它将为复制的文件添加一行。我想知道其中是否有一些信息可以指出该问题。

相关内容