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 发送文件给手机,步骤如下:

  1. PC 端打卡文件浏览器,寻找要发送的文件/目录
  2. 找到文件/目录,单击右键,弹出菜单,选择 “发送到手机”
  3. 等待发送结果:成功或者失败

一般默认把文件发送到 /sdcard/Downloads 目录,方便寻找。

个人实现方式

手机端要求

  1. 已经 root,可以安装 Magisk
  2. 开启 sshd 服务,可以参考 Magisk-Modules-Repo/ssh
  3. 相对固定的 ip 地址,可以使用 wireguard,让一些设备永远在一个局域网。

满足上述条件后,其实发送文件到手机就已经很简单了,同样使用 rsync 或者 scp 命令即可。

scp test.log root@<android_ip> /sdcard/Downloads

PC 端开发

我们再对 ubuntu 的文件管理器(nautilus)做一些增强,增加右键菜单项,增加类似发送文件到手机的菜单项。该文件管理器天生支持这类增强开发,还有很好 demo 可以参考。

代码如下: 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

PC 2 Android