移动设备的一大缺陷是,将数据从设备传输到计算机非常困难。移动设备在这方面有着悠久的历史。早期的移动设备,如 Pilot 和 Handspring PDA 设备,需要特殊的同步软件(您必须虔诚地执行同步,以免设备电池耗尽并永远丢失所有数据)。旧款 iPod 需要特定于平台的接口。现代移动设备默认将您的数据发送到在线帐户,以便您可以在计算机上再次下载。
好消息是,如果您运行的是 Linux,您可能可以使用 gphoto2
命令与您的移动设备进行交互。gphoto2
最初是作为一种与数码相机通信的方式开发的,当时数码相机还只是一种相机,现在它可以与许多不同类型的移动设备通信。也不要被名称所迷惑。它可以处理所有类型的文件,而不仅仅是照片。更好的是,它是可脚本化的、灵活的,并且比大多数 GUI 界面更强大。
如果您曾经为找到一种舒适的方式来同步您的计算机和移动设备之间的数据而苦恼,请查看 gphoto2
。
安装 gPhoto2
您的 Linux 系统很可能已经安装了 libgphoto2,因为它是与移动设备交互的关键库。但是,您可能需要安装命令 gphoto2
,它可能在您的存储库中可用。
在 Fedora 或 RHEL 上
$ sudo dnf install gphoto2
在 Debian 或 Ubuntu 上
$ sudo apt install gphoto2
验证兼容性
要验证您的移动设备是否受支持,请使用 --list-cameras
并通过 less
管道传输
$ gPhoto2 --list-cameras | less
或者您可以将其通过 grep
管道传输以搜索术语。例如,如果您有三星 Galaxy,则使用 grep
并使用 -i
开关关闭大小写敏感性
$ gphoto2 --list-cameras | grep -i galaxy
"Samsung Galaxy models (MTP)"
"Samsung Galaxy models (MTP+ADB)"
"Samsung Galaxy models Kies mode"
这证实了三星 Galaxy 设备通过 MTP 和带有 ADB 的 MTP 得到支持。
如果您找不到您列出的设备,您仍然可以尝试使用 gphoto2
,以防您的设备实际上是列表上的某个设备,伪装成不同的品牌。
查找您的移动设备
要使用 gPhoto2,您首先必须将移动设备插入计算机,设置为 MTP 模式,并且您可能需要授予您的计算机与其交互的权限。这通常需要与您的设备进行物理交互,特别是按下 UI 中的一个按钮,以允许连接到它的计算机访问其文件系统。

如果您不授予您的计算机访问您移动设备的权限,那么 gPhoto2 会检测到您的设备,但无法与其交互。
为了确保您的计算机检测到您连接的设备,请使用 --auto-detect
选项
$ gphoto2 --auto-detect
Model Port
---------------------------------------
Samsung Galaxy models (MTP) usb:002,010
如果未检测到您的设备,请首先检查您的电缆,然后检查您的设备是否配置为通过 MTP 或 ADB 或 gPhoto2 为您的设备支持的任何协议进行接口,如 --list-cameras
的输出所示。
查询您的设备功能
对于现代设备,通常有大量潜在功能,但并非所有功能都受支持。您可以使用 --abilities
选项确定,我发现它非常直观。
$ gphoto2 --abilities
Abilities for camera : Samsung Galaxy models (MTP)
Serial port support : no
USB support : yes
Capture choices : Capture not supported by driver
Configuration support : no
Delete selected files on camera : yes
Delete all files on camera : no
File preview (thumbnail) support: no
File upload support : yes
无需指定您要查询的设备,只要您只连接了一个设备即可。但是,如果您连接了多个 gPhoto2 可以与之交互的设备,则可以通过端口、相机型号或 usbid 指定设备。
与您的设备交互
如果您的设备支持捕获,那么您可以从计算机通过相机抓取媒体。例如,要捕获图像
$ gphoto2 --capture-image
要捕获图像并立即将其传输到您所在的计算机
$ gphoto2 --capture-image-and-download
您还可以捕获视频和声音。如果您连接了多个摄像头,您可以按端口、摄像头型号或 usbid 指定要使用的设备
$ gphoto2 --camera "Samsung Galaxy models (MTP)" \
--capture-image-and-download
文件和文件夹
要智能地与设备上的文件进行交互,您需要了解暴露给 gPhoto2 的文件系统的结构。
您可以使用 --get-folders
选项查看可用文件夹
$ gphoto2 --list-folders
There are 2 folders in folder '/'.
- store_00010001
- store_00020002
There are 0 folders in folder '/store_00010001'.
There are 0 folders in folder '/store_00020002'.
这些文件夹中的每一个都代表设备上的存储目标。在此示例中,store_00010001
是内部存储,store_00020002
是 SD 卡。您的设备结构可能有所不同。
获取文件
现在您已经了解了设备的文件布局,您可以从设备中提取照片。您可以根据要从设备中获取的内容使用许多不同的选项。
您可以获取特定文件,前提是您知道完整路径
$ gphoto2 --get-file IMG_0001.jpg --folder /store_00010001/myphotos
您可以一次获取所有文件
$ gphoto2 --get-all-files --folder /store_00010001/myfiles
您可以仅获取音频文件
gphoto2 --get-all-audio-data --folder /store_00010001/mysounds
还有其他选项,其中大多数取决于您的设备以及您使用的协议支持的功能。
上传文件
现在您已经了解了潜在的目标文件夹,您可以将文件从计算机上传到设备。例如,假设您的当前目录中有一个名为 example.epub
的文件,您可以使用 --upload-file
选项与 --folder
选项结合使用,将文件发送到您的设备,以指定您要上传到的存储位置
$ gphoto2 --upload file example.epub \
--folder store_00010001
如果您希望将多个文件上传到合并的位置,则可以在设备上创建一个目录
$ gphoto2 --mkdir books \
--folder store_00010001
$ gphoto2 --upload-file *.epub \
--folder store_00010001/books
列出文件
要查看上传到设备的文件,请使用 --list-files
选项
$ gphoto2 --list-files --folder /store_00010001
There is 1 file in folder '/store_00010001'
#1 example.epub 17713 KB application/x-unknown
$ gphoto2 --list-files --folder /store_00010001/books
There is 1 file in folder '/store_00010001'
#1 example0.epub 17713 KB application/x-unknown
#2 example1.epub 12264 KB application/x-unknown
[...]
探索您的选项
gPhoto2 的大部分功能取决于您的设备,因此您的体验将与任何其他人的体验不同。gphoto2 --help
中列出了许多操作供您探索。使用 gPhoto2,永远不再为从设备到计算机传输文件而苦恼!
6 条评论