前言
2025年的NextCloud已经能完全满足我在桌面端的数据同步需求了,但移动端还不行,主要制约是没有 双向同步 和 释放空间 的选项,使我无法间歇性地腾出手机上的储存空间。
差异 | NextCloud | Syncthing |
---|---|---|
安装难易度 | ⚠相对困难 | ✅相对简单 |
硬件需求 | ⚠中心化存储,需要服务器 | ✅去中心化,两个手机也能同步 |
双向同步 | ⚠仅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里。