RClone同步文件夹到webdav

前往原站点查看

2025-03-19 19:35:47

   先来简单描述一下研究使用rclone工具的缘由吧,倒是可以叙述很长的篇幅,我这里就简单概述一下,不想看的可以直接滑倒下文查看干货,干货很简单,三言两语即可介绍完,不过作为一个博客来说,总归还是要水一点字数的😉。


起因

   随着日常生活中见到的新奇事物越来越多,手机里的照片、LR处理的CameraRaw文件、以及各种其他珍藏文件也迅速的填满我的虚拟世界。作为出生在虚拟数据构成的世界中,对各种数据总有一种患得患失的感觉,害怕数据丢失导致各种重要的人生轨迹也随着记忆的模糊再也无法重新回味。这些数据仿如我的赛博档案,想要永久的珍藏,直到生命的最后一点气息残留,一旦丢失有如几十年白过~

   在我手上的,迫切需要备份的内容有:


初期尝试

   存储的方案有很多,我的两个同学已经组了自己的NAS系统,实现了文件的存储自由,但是我没有采用——因为我对NAS还是有一些安全性的顾虑,除非异地再组一台,否则生怕自然灾害或者什么火灾啊什么的,导致数据丢失。

   正好手上还有一块大学时期的移动硬盘,作为冷备份盘,暂且先就将一些极其需要备份的数据冷备份一下。手机连接usb直接上传到移动硬盘中。不过这种方式还是心里不踏实,一方面没有上云,对于集中地区的突发事件抗风险能力较弱,而且难以集中化管理。

   接着,随着deepseek突然间的家喻户晓,一路研究,并且使用了CherryStudio 聊天助手,从设置中,第一次了解到了WebDav这种协议,也是从此打开了新世界的大门。

   CherryStudio中推荐使用的是“坚果云”,也还可以,不过免费的用户有流量限制,1G上行和3G下行,而对于图片生产大户的我而言,这肯定是远远无法满足个人使用需求的,如果是相机拍摄一部4K视频,1G真的是什么都做不到。只能存存文档什么的。

   契机是偶然在萌国发现了一个论坛,论坛里还有免费1T的网盘提供,恰好也支持webdav协议传输。我按捺不住内心的喜悦,立马注册并且成为了潜水萌身份成员,获得了2T的可用空间!真的万分感谢萌国的服务支持,从此不再后悔入萌国!

    一开始,粗略的百度了一下有没有同步本地文件到webdav的工具,但是并没有搜到理想的(可能是搜的方式不对),所以直接手动造轮子!通过自己优秀的算法和逻辑,也是成功的造出来一个勉强能用的轮子,大致思路就是,先获取所有文件,然后将文件上传到dav,并且记录到sqlite数据库中,下次上传时检查文件是否在库中存在,如果存在那么不下载。项目地址(https://gitea.dreamcenter.top/dai/webdav)。不过如果文件修改了,那么是无法识别到的,只能用来存储一些图片,对于要修改的内容,还是很鸡肋的,于是,在想,既然同步这么常见的需求,肯定会有成熟的产品吧,还是决定寻找一个可用的现有的工具,解决性能和鲁棒性问题。

// 获取根目录下的所有文件(含子文件)    public static List<File> getAllFiles() {
        List<File> list = new LinkedList<>();

        File file = new File(WebDavConfig.getHomePath());

        Queue<File> dirQueue = new LinkedList<>();
        dirQueue.add(file);

        while (!dirQueue.isEmpty()) {
            File tmp = dirQueue.remove();

            File[] files = tmp.listFiles();
            if (files != null) {
                for (File curFile : files) {
                    if (curFile.isDirectory()) dirQueue.add(curFile);
                    else list.add(curFile);
                }
            }
        }

        return list;
    }


神工具RClone

    通过不断的检索互联网,最终发现了这个工具RClone,他是一个参考rsync的综合同步工具,不仅可以进行简单的同步,还可以云厂商间同步等强大功能,这不就是我要找的工具吗!工具地址:https://github.com/rclone/rclone 。选择合适的版本下载即可。



    接下来是目录下打开命令行,输入  rclone config ,进行配置。先输入 n 回车,表明要配置远程地址,然后输入 远程地址的名称,我这里设置成 moe,可以随便起,自己知道对应哪个服务即可。


    回车后,即可选择服务了,我这里应用的是webdav服务,所以选择 56 号,输入自己的webdav地址,并且选择7其他的网站服务。



    输入账户密钥,bearer不用设置,直接回车即可,进阶配置按需即可,我这直接n不设置。



     配置成功后,即可看到返回结果。





    接下来就是一些指令了,我这里总结了一些常用的指令:

   rclone config  配置webdav
   rclone copy    初次同步拷贝
   rclone check   检查内容[--differ]
   rclone sync    后续同步拷贝(-P显示进度)flag:
  -n --dry-run   测试运行
  -P --progress 显示实时传输进度
  --transfers=N  并行数量

    当然大家也可以参考下面三篇技术文章:官方flags参数说 、 Rclone云存储数据同步工具 、 云存储技术的神器--rclone 。

    我这里示范一个拷贝目录到云上的代码和效果:

    语法: rclone copy 本地根文件夹 远程地址名称:目标根文件夹 -P 

rclone copy D:\software\adobe\Lightroom\IMG_SRC moe:LR/IMG_SRC -P

    回车后,就开始进行传输了,慢慢等待即可!之后如果要多文件夹同步,写上脚本即可。当然这个工具还有很多配置和功能没完全研究,不过核心的内容就是上面这么简单啦!


同步方式架构

    上面已经解决了从本地将文件夹同步到云上的难点,接下来还要解决如何从手机快速同步,有了解到工具 Resilio Sync , 不过还没实际尝试,有待研究,不是本文重点,大家也可以自行研究啦!接下来是我的整体的架构方案图:


    可见还是比较简单的。本机一份,冷存储一份,云上一份。能防止单机损坏、区域地震、全球断网各种情况,无法预防地球毁灭的情况[[疑惑]]

    




上一篇: SSH隧道实现内网穿透
下一篇: Springboot + MCP + JUnit 模板项目