V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wayne3602
V2EX  ›  问与答

关于桌面端云盘同步本地文件夹,我有一个问题想问

  •  
  •   wayne3602 · 320 天前 · 1867 次点击
    这是一个创建于 320 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我不是程序员,我想问一个问题,一个云盘做一个同步指定文件夹的功能很难吗?(没有任何恶意哈,只是啥也不懂,提问一下😁)按我自己的设想,就是做一个自动任务,触发条件就是文件夹有文件发生改动,自动上传到云盘

    首先最常用的onedrive,只能同步 [桌面] [文档] [图片] 这几个文件夹,鸡肋

    其次是百度网盘,搞了个什么同步空间,我还要把文件拖进去才能同步,分的好好的文件夹,拖进去就乱了

    当然上面可以用软连接的方式解决,但是我之前迁移的时候不知怎么滴出现了一些问题,文件误删了很多,导致我再也不想用软连接

    阿里云盘有同步文件夹功能,但是要开会员,小白羊的同步功能作者说还在开发

    目前只有谷歌云端硬盘完美同步了指定文件夹,而且当我插入 u 盘的时候还会询问我当 u 盘插入时,是否想要同步 u 盘的文件,真的很贴心,唯一不满就是有点小贵

    真心的想问,这个功能是不好做,代码不好写还是容易出 bug ?

    33 条回复    2023-06-13 19:07:08 +08:00
    g22k
        1
    g22k  
       320 天前 via Android
    wps 云盘,小米云盘。 威联通 nas 的 qsync
    cnlaok999
        2
    cnlaok999  
       320 天前
    哎,dropbox 也不支持这个功能
    summerwar
        3
    summerwar  
       320 天前   ❤️ 1
    onedrive 可以同步其他文件夹,建议看下这里 https://support.microsoft.com/zh-cn/office/%E5%9C%A8-windows-%E4%B8%8A%E4%BD%BF%E7%94%A8-onedrive-%E5%90%8C%E6%AD%A5%E6%96%87%E4%BB%B6-615391c4-2bd3-4aae-a42a-858262e42a49

    使用 onedrive 的时候可以使用 microsoft 的硬链接、软链接等,更好用
    wayne3602
        4
    wayne3602  
    OP
       320 天前 via Android
    @g22k 都是一些小众的,资源太少哈哈,不常用
    wayne3602
        5
    wayne3602  
    OP
       320 天前 via Android
    @summerwar 是的,我之前就是用软连接同步的,但是一直不明白为啥微软一直不开发这个功能
    Vegetable
        6
    Vegetable  
       320 天前
    并不难,但是产品设计上有很多不好处理的地方。

    举个例子,假如我指定了 A 电脑的 E 盘学习资料文件夹,那么我用 B 电脑时如果没有 E 盘怎么办?难道要求用户给自己的每一个同步文件夹,在每一台电脑上都指定一个映射吗?只要将产品设计成 Onedrive 和百度这种形式,就能完美避免这种问题。

    这只是我随便想到的一个理由,深挖下去必然还会后很多值得商榷的地方。百度和 Onedrive 这种方案未必多好,但是显然没有太致命的问题。
    wayne3602
        7
    wayne3602  
    OP
       320 天前 via Android
    @Vegetable 为什么会纠结这个问题呢,本地和云端是一种映射关系,就算是 e 盘的文件,其对应的是云盘上的根目录下的文件,现在有其他电脑想访问这个文件,访问云盘根目录的这个文件即可,而无需真的有一个 e 盘
    NoOneNoBody
        8
    NoOneNoBody  
       320 天前
    所有程序都是一样,当和预想的情况一致,会很顺利实现,但不一致,就多了很多工作,而且这增加的工作量不是 1+1 那么简单
    但是,现实中,解决非预想情况总是占工作量的多数,甚至九成以上

    先不说同步,就举例单纯复制,预想很简单,就不说了
    举例其中一个非预想情况:特殊文件名
    那会增加什么工作呢?系统兼容(例如无扩展名在 windows 是一般文件,在 linux 默认是可执行文件)、字符编码(中文、日文、韩文……难道中文系统用泰文的文件名就操作失败么?)、非法字符……并不是多了一道工序那么简单

    同步一个文件就涉及文件名、路径、大小、hash 比较、权限、是否锁死……
    文件夹就更多了,尤其深层递归等等
    GUI 还有其他事情,非预想情况例如拖放时对焦不准、字符集不全、不同分辨率的兼容、触屏的误触……每个人都有一种“私人”的操作习惯,有时就简单操作顺序都会引发问题,例如先改名后复制 vs 先复制后改名
    网络又是一个大的“问题集合”,最简单的例子就是传输过程中断网怎么办

    容错是必须做的,即使第一版就已经要想象各种“不合理的操作”,预想越多发行时口碑越好,然后靠用户反馈那些“根本没想到”的情况

    另外,你说的是软链还是 junction ,windows 建立软链是需要管理员权限的,junction 则不需要,但是 junction 这东西在 windows 以外其他系统没有
    anerinck
        9
    anerinck  
       320 天前
    试试看 MEGA 盘?
    strp
        10
    strp  
       320 天前   ❤️ 1
    猜你想要:Synology Drive
    Sharuru
        11
    Sharuru  
       319 天前 via iPhone
    是的,我也很纳闷…

    这也是为什么云盘那么多,用到最后还是只能和坚果云绑定。

    还算够用的分享功能(允许上传)+任意文件夹同步这个真的太刚需了。
    webcape233
        12
    webcape233  
       319 天前 via iPhone
    免费的 mega 50g ,自建 syncthing
    villivateur
        13
    villivateur  
       319 天前
    nextcloud 桌面端的同步很好用,而且还是开源的,可以看看源码
    wipbssl
        14
    wipbssl  
       319 天前
    为什么不直接把需要同步的文件夹扔到 onedrive 里呢?
    littlefishcc
        15
    littlefishcc  
       319 天前
    我一直用 wps 网盘同步,非会员只能指定一个文件夹,会员可以置顶 5 个。
    技术检测文件改变,如果是指定文件夹就进行同步逻辑,windows 有对应的 api ,之前还特别研究了一下。
    小米云盘也可以,不过很容易出现冲突,然后多出来一个备份文件(同步算法感觉还是有一定问题),百度貌似也可以指定。
    wayne3602
        16
    wayne3602  
    OP
       319 天前 via Android
    @wipbssl 对于文件分类每个人都有自己的习惯,把文件放到便于找到的位置和合理的位置才是分类的目的,我为什么为了同步要打破之前的分类???
    JamesR
        17
    JamesR  
       319 天前
    用 FreeFileSync + Windows 任务计划,同步到网盘指定文件夹即可。
    wayne3602
        18
    wayne3602  
    OP
       319 天前 via Android
    @NoOneNoBody 你说的没错,但是拿 onedrive 来举例,它已经能够桌面,文档和图片文件夹,而在这几个文件夹中也是存在你说的各种复杂情况的,尤其是文档文件夹,腾讯的软件都会在这里拉屎,存在各种各样的文件,甚至还有一些由于程序在运行无法同步的文件,它可以做好这些文件的同步,为什么不能做好其他文件的同步呢
    wayne3602
        19
    wayne3602  
    OP
       319 天前 via Android
    @strp 谢谢推荐,谷歌云端硬盘已经满足我的所有需要,而且是大厂😂❤️
    Sniper000
        20
    Sniper000  
       319 天前
    iCloud 2t 的也可以
    shuxhan
        21
    shuxhan  
       319 天前
    坚果云支持这个特性,syncthing 也不错
    chengxy
        22
    chengxy  
       319 天前
    @shuxhan #21 syncthing 2023 年了依然没解决 Windows 不支持 Linux 下特殊字符串命名问题。
    freedgw
        23
    freedgw  
       319 天前 via Android
    坚果云,本地电脑上的任意目录右键就可以同步,如果单纯同步重要文件的话免费的流量也够用了
    JIUBASHI
        24
    JIUBASHI  
       319 天前 via iPhone
    Koofr 、filen ,俩我都在用,俩都有 lifetime plan ,不过很多人不认可终身套餐
    oldshensheep
        25
    oldshensheep  
       319 天前   ❤️ 1
    其实 Junction 是可以没问题的,网上一般教程是在 Onedrive 创建一个 Junction 到目的地址,但是实际上把文件夹移动到 Onedrive 然后在目的地址创建 Junction 更好,这样误删的可能性也比较少,因为文件是真正存在 Onedrive ,链接丢失也不会导致文件丢失。
    用 powershell 就是
    New-Item -ItemType Junction -Path $path -Value $dst

    我现在写了一个简单的脚本可以方便的帮助我重装系统恢复带原来的状态
    hkw34275719
        26
    hkw34275719  
       319 天前
    你需要群晖
    wayne3602
        27
    wayne3602  
    OP
       319 天前
    @freedgw 1g ,少的有点离谱哈哈
    wayne3602
        28
    wayne3602  
    OP
       319 天前
    @oldshensheep 问一下,为什么你们都在说 junction 呢?那个不是 xp 时代的东西嘛,现在一般不都是 mklink
    wayne3602
        29
    wayne3602  
    OP
       319 天前
    @hkw34275719 十年内不打算群晖,现在还是大学生一枚,等以后成家+工作稳定再考虑吧
    SenLief
        30
    SenLief  
       319 天前 via iPhone
    这个你用坚果云就好了,国内的同步盘他家做的相当不错的,你要的也支持。只不过就是他计费的方式很怪,只适合同步小文档,不适合视频什么的。
    oldshensheep
        31
    oldshensheep  
       319 天前
    mklink /J 就是 Junction, /D 就是符号链接,因为 /J 不需要管理员权限所有我一般用 Junction
    当然如果打开开发者模式就不用管理员权限

    如果你把文件放到 Onedrive 再链接回去就不会出奇怪的问题。用一个文件记录文件夹链接表,方便以后重建链接啥的,还可以用脚本一键建立链接,这就是我现在的做法。
    chinni
        32
    chinni  
       319 天前 via Android
    @JIUBASHI koofr 1t lifetime 用户…他客户端真的不怎么好用…所以我用他的 WebDAV …他家客户端很多特殊文件夹不能同步…文件数量很多的文件夹经常同步失败
    amirobotics
        33
    amirobotics  
       319 天前
    onedrive 同步指定文件夹,关键字:mklink
    google drive 贵?,关键字:土区 google
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   870 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:17 · PVG 04:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.