我有这个文件结构:
...folders/to/copy
...folders/to/mirror
我一直在做:
rsync --ignore-existing -raz --progress $source $destination
这对于保持两个文件夹树上的所有内容都是最新的非常有用。但现在我只需要对 24 小时前更改的文件执行此操作。我尝试过这样的事情:
rsync -rav `find $source -mtime 1` $destination
问题是这会弄乱文件树并且不能按我的需要工作。有一个更好的方法吗?
我想备份文件结构,使用“文件夹”及其中所有内容的相对路径,从一个地方到另一个地方,只留下超过 24 小时的文件 ( mtime
)。
答案1
您可以使用它find | rsync
来过滤您有兴趣复制的文件,如下所示
src=/source/folders/to/./copy
dst=/destination/mirrored/folders
find "$src/" -type f -mtime +0 -print0 |
rsync --dry-run -a -iv --files-from - --from0 / "$dst"
--dry-run
当您对一组结果感到满意时,删除。-iv
如果您想要更安静的操作,请将其移除。
我应该指出,/./
源路径的部分定义了应保留文件路径的点。例如,如果您有一条路径,/source/folders/to/./copy/sub/here.txt
那么相应的目的地将变为/destination/mirrored/folders/copy/sub/here.txt
。有关详细信息,请参阅文档中的--files-from
和--relative
( -R
) 选项。man rsync
如果您的源路径是相对的,那也可以。
该解决方案以 GNUfind
或其他提供-print0
.如果您没有该选项,您也可以删除--from0
,但最好替换-print0
为-exec printf '%s\0' {} +
。请参阅以下位置的讨论:GNU find 的 -print0 的 POSIX 替代品。