NextCloud与Syncthing配合使用

在这里插入图片描述

前言

2025年的NextCloud已经能完全满足我在桌面端的数据同步需求了,但移动端还不行,主要制约是没有 双向同步释放空间 的选项,使我无法间歇性地腾出手机上的储存空间。

差异NextCloudSyncthing
安装难易度⚠相对困难✅相对简单
硬件需求⚠中心化存储,需要服务器✅去中心化,两个手机也能同步
双向同步⚠仅PC端✅全平台
释放空间⚠仅PC端❌底层逻辑上就不支持
传输方式⚠基于域名,需要自定义路由✅P2P
临时分享文件✅容易,可以直接提供链接⚠需要接收端下载软件

NextCloud其他问题都能够通过一些技术手段解决,如自适应传输方式通过NextCloud + Tailscale实现在同一局域网下走局域网传输,否则通过有公共IP的服务器中继。

而由于双向同步释放空间功能在移动端的局限,仍有部分使用场景无法满足。

我需要的使用场景是这样的:将手机上每日增长的文件定时转移到云上统一管理,释放本地储存空间,在需要时可以下载。

因此我将NextCloud和Syncthing搭配使用,在移动端使用Syncthing同步,并定时将同步的数据迁移到NextCloud中。

Syncthing配置

将需要同步的文件夹设置好共享,并使用双向同步(即移动端和服务器端都设置文件夹类型: 发送和接收
我选择安卓端同步"~/DCIM" "~/Pictures" "~/Movies" "~/MIUI/sound_recorder"四个文件夹,服务器端储存到/newdata/syncthing/MyPhone
安卓端需要设置忽略模式.*,不同步这些文件夹下的隐藏文件,如手机系统回收站和缩略图缓存等

NextCloud配置

创建文件夹存放迁移的移动端数据,我这里是/newdata/nextcloud/dlw/files/MyPhone

数据迁移脚本

该脚本将Syncthing特定文件夹中的内容移动到NextCloud指定文件夹中。冲突处理方式为:同名文件夹会合并,同名文件会覆盖。
运行脚本迁移数据后,由于Syncthing的双向同步,移动端的对应文件夹也会被删除,达到释放空间的目的,同时移动端可以通过NextCloud客户端浏览和下载迁移后的文件。

mv_syncthing2nextcloud.sh

#!/bin/bash
set -e  # 遇到错误立即退出

# 设置源和目标目录
SRC_BASE="/newdata/syncthing/MyPhone"
NC_BASE="/newdata/nextcloud"
NC_FILE_BASE="dlw/files/MyPhone"
DEST_BASE="$NC_BASE/$NC_FILE_BASE"

# 需要同步的子目录
DIRS=("DCIM" "Pictures" "Movies" "sound_recorder")

echo "开始移动文件..."

for DIR in "${DIRS[@]}"; do
    SRC_DIR="$SRC_BASE/$DIR"
    DEST_DIR="$DEST_BASE/$DIR"

    echo "处理目录: $SRC_DIR"

    # 查找所有非隐藏文件(不包括隐藏文件或隐藏目录中的文件)
    find "$SRC_DIR" -type f \( ! -path '*/.*' -a ! -name '.*' \) | while read -r FILE; do
        # 计算相对路径
        REL_PATH="${FILE#$SRC_DIR/}"
        DEST_PATH="$DEST_DIR/$REL_PATH"

        # 创建目标文件夹并设置权限
        if [ ! -d "$(dirname "$DEST_PATH")" ]; then
            echo "创建目录: $(dirname "$DEST_PATH")"
            sudo mkdir -p "$(dirname "$DEST_PATH")"
            sudo chown www-data:www-data "$(dirname "$DEST_PATH")"
        fi

        # 移动文件
        sudo mv "$FILE" "$DEST_PATH"
    done
done

# 更改目标文件权限
sudo chown -R www-data:www-data "$DEST_BASE"

echo "文件移动完成,开始执行 Nextcloud 文件扫描..."

# 执行 Nextcloud 文件扫描,如果你用的不是该版本的Docker AIO安装,可能需要修改该命令
# sudo docker exec -it nextcloud-aio-nextcloud php /var/www/html/occ files:scan --all  # 扫描所有文件
sudo docker exec -it nextcloud-aio-nextcloud php /var/www/html/occ files:scan --path="$NC_FILE_BASE"  # 扫描指定目录


echo "同步完成 ✅"

其他

  • 整理手机数据时发现有很多旧的照片使用了小米云同步,在本地没有或只有低清缩略图,因此我将小米云同步的数据全部下载下来,用Syncthing同步到服务器上,再迁移到NextCloud里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值