You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rsync+Find同步远程今日0点以来的文件至本地?

解决Git Bash中同步远程今日修改文件到本地的问题

嘿,你原来的命令没法生效,核心问题是rsync不能直接通过管道接收find的输出当作待同步文件列表,得用专门的参数来处理这种场景。下面给你两种实用的解决方案:

方案一:兼容特殊字符的完整路径同步

这个方案能稳妥处理文件名包含空格、换行等特殊字符的情况,同步后会保留远程文件的完整绝对路径结构:

ssh user@192.168.1.100 'find /home/user/test/ -mtime -1 -type f -print0' | rsync --archive --verbose -zz --human-readable --from0 --files-from=- -e ssh user@192.168.1.100:/ '/e/rc/'

关键参数说明:

  • -print0:让find用空字符分隔文件名,避免特殊字符导致的解析错误
  • --from0:告诉rsync用空字符分割输入的文件名列表,和-print0配对使用
  • --files-from=-:指定rsync从标准输入(管道传递的内容)读取要同步的文件路径
  • 远程源写/:因为find输出的是完整绝对路径,rsync会基于这个路径把文件同步到本地,比如远程/home/user/test/file.txt会同步到本地/e/rc/home/user/test/file.txt

方案二:保持远程目录相对结构同步

如果你想把远程/home/user/test/下的文件直接同步到本地/e/rc/(只保留test目录内的相对结构,不嵌套完整系统路径),可以调整find的输出格式:

ssh user@192.168.1.100 'cd /home/user/test && find . -mtime -1 -type f -print0' | rsync --archive --verbose -zz --human-readable --from0 --files-from=- -e ssh user@192.168.1.100:/home/user/test/ '/e/rc/'

这里的调整点:

  • 先cd到远程的test目录,再从.开始查找,输出相对路径
  • rsync的远程源指定为/home/user/test/,这样同步时会把相对路径对应到本地/e/rc/下,比如远程/home/user/test/sub/file.txt会同步到本地/e/rc/sub/file.txt

额外优化提示

如果要严格筛选今日0点之后修改的文件,-mtime -1是指24小时内的文件,要是服务器和本地时间一致没问题;如果想精确匹配当日零点,可以改用find的-newermt参数:

ssh user@192.168.1.100 'find /home/user/test/ -newermt "00:00" -type f -print0'

内容的提问来源于stack exchange,提问作者cs9112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:11:44