在各个子目录中具有特定日期条件的 Rsync

在各个子目录中具有特定日期条件的 Rsync

我有两个相同的文件夹,其中包含用于开发和生活的子文件夹,例如:

/development/subdirectory1
/development/subdirectory1/subsub1
/development/subdirectory2
/development/subdirectory2/subsub2
/development/subdirectory2/subsub2/subsubsub2

/live/subdirectory1
/live/subdirectory1/subsub1
/live/subdirectory2
/live/subdirectory2/subsub2
/live/subdirectory2/subsub2/subsubsub2

我想将特定的开发文件夹后完成的所有最近工作同步到实时文件夹。

为此,我正在使用

find development/ -type f -newermt '2/2/2020 0:00:00' -exec rsync -avz {} live/ \;

但发生的情况是,开发中的所有文件都被复制到活动文件夹的根目录中,即使这些文件位于开发文件夹的子文件夹中。但我想要的是 rsync 来同步目标上确切子文件夹中的文件。

所以,基本上我想要的是执行“rsync -avz”以在特定日期之后更新文件。

我也尝试了多种解决方案来找到解决方案,但找不到。尝试使用--files-from。对此有什么想法吗?

答案1

您可以将要复制的文件集提供到单个rsync.难题的缺失部分是在目标中保留源路径:

find development/./ -type f -newermt '2/2/2020' |
    rsync --dry-run -vtpR --files-from - . live/

.源路径中的标记find路径要在目标中保留的起始点。我省略了您的-z标志,因为本地复制时不执行压缩。--dry-run当你高兴它会做你希望它做的事情时,删除它。

请注意,rsync这里并没有真正做任何聪明的事情。您同样可以使用tar(或pax):

tar cf - -C development --newer-mtime='2020-02-02' . | tar xvf - -C live

相关内容