我想要从远程 rsync 到本地早于(或晚于)特定时间的文件。
我见过这样的回答find /src/path -mtime -1 | rsync ...
,但只有当目录在本地可见时才有效。因为它是远程的,所以不可见。
那么我如何find
在远程运行并将其结果 rsync 回本地?
答案1
rsync 有一个--list-only
选项,它提供远程文件的索引,包括时间戳:
$ rsync --list-only $REMOTE
drwx------ 160 2018/09/04 12:55:12 .
-rw-r--r-- 1,348 2018/09/04 12:52:33 .bash_profile
-rw-r--r-- 55 2018/09/04 12:52:33 .bashrc
...
在此列表上进行过滤以仅选择合适的日期,然后将其输入到后续 rsync 的--files-from
参数中(可以通过使用引用 stdin --files-from=-
)就可以完成这项工作。
例如,以下内容将把 mtime 在 2018-08-01 和 2018-08-07 之间的文件 rsync 到本地计算机(使用适当的$REMOTE
和值$LOCAL_PATH
;awk 命令中的注释$5
指的是 rsync 输出中的第五列 - 即文件名)
$ rsync --list-only $REMOTE | awk '/2018-08-0[1-7]/ {print $5}' | rsync --files-from=- $REMOTE $LOCAL_PATH
这并不能解决使用 类型说明符的全部问题find
,但可以-mtime
进一步解析日期字符串(例如使用)来扩展这个问题。date
答案2
您可以find
在 rsync 中用作远程路径参数:
rsync -av $REMOTE:'`find /src/path -type f -mtime -1 -print`' $LOCAL_PATH