PC 发送文件给 Android
2023年10月27日 · 713 字 · 2 分钟
问题 & 需求
之前写过一篇文章–Android 相册备份,介绍如何将 Android 设备上照片备份到其它设备(pc,pi)上。 参考该方法,我们可以使用 rsync 或者 scp 命令,从 Android 设备发送文件到 PC 端。但是我们如何更方便地从 PC 端发送文件到 Android 端?
已有解决方案
网上有很多介绍 Android 和 PC 间如何互传文件,比如这篇 “15 simple ways to transfer files from your Android to your PC or Mac",里面介绍了很多,从简单的数据线,蓝牙,到第三方云盘软件,先上传,手机端打开同软件,再下载。国内环境的话,我之前经常用钉钉互穿文件。但是钉钉的使用体验不好,手机端下载文件后目录不好找,不是在标准的 /sdcard/Downloads
目录下。
理想中便捷的操作
从 PC 发送文件给手机,步骤如下:
- PC 端打卡文件浏览器,寻找要发送的文件/目录
- 找到文件/目录,单击右键,弹出菜单,选择 “发送到手机”
- 等待发送结果:成功或者失败
一般默认把文件发送到 /sdcard/Downloads 目录,方便寻找。
个人实现方式
手机端要求
- 已经 root,可以安装 Magisk
- 开启 sshd 服务,可以参考 Magisk-Modules-Repo/ssh
- 相对固定的 ip 地址,可以使用 wireguard,让一些设备永远在一个局域网。
满足上述条件后,其实发送文件到手机就已经很简单了,同样使用 rsync
或者 scp
命令即可。
scp test.log root@<android_ip> /sdcard/Downloads
PC 端开发
我们再对 ubuntu 的文件管理器(nautilus)
做一些增强,增加右键菜单项,增加类似发送文件到手机
的菜单项。该文件管理器天生支持这类增强开发,还有很好 demo 可以参考。
- 官方开发文档: NautilusScriptsHowto
- 官方Demo:NautilusScriptsHowto/SampleScripts
代码如下: CopyToOnePlus.sh
#!/bin/bash
FILEPATH=`echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's@file://@@g'`
SCP='/usr/bin/scp'
if [ -d "$FILEPATH" ]; then
SCP="$SCP -r "
fi
$SCP $FILEPATH root@10.10.0.3:/sdcard/
if [ $? -eq 0 ]
then
zenity --info --text="文件/目录已发送到手机"
else
zenity --error --text="文件/目录发送失败 $?"
exit
fi