我有两个相同的文件夹,其中包含用于开发和生活的子文件夹,例如:
/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