前些日子,朋友拿来一部 iPhone,想把上面的照片全部传输到 Mac 上,然后把旧的 iPhone 送去维修。但是有许多的限制条件,导致他无法成功传输照片,就让我来帮忙解决这个问题了。
操作条件如下:
- 4000+ 照片
- 没有启用 iCloud 同步
- AirDrop 传输图片存在丢图片的情况
- 没有 MFi 数据线,即使有 USB 2.0 的速度也不太够用
- 下载文件夹中有许多原来其他无关的文件
综上所述,考虑依旧使用 AirDrop 方案来实现图片传输。考虑因素如下:
- 4000+照片,USB2.0实际速度会低于 30MB/s,但是 AirDrop 可以达到 40MB/s 左右。
- 没有启用 iCloud 同步,从 Mac 相册直接下载图片也就不太现实。
- AirDrop 丢图片的情况,猜测是原来图片存到了 iCloud 上面,在 iPhone 上只是一个链接的形式,在 AirDrop 的时候由于网络原因无法下载成功,所以才出现了丢图片的情况。
- 没有 MFi 数据线,使用未认证数据线连接 Mac 和 iPhone 没有充电,再次否定数据线传输方案。
- 为了解决下载文件夹原来的文件问题,可以用原来下载文件夹中的文件新建文件夹,然后临时移动到文稿或者其他位置。
实战
- 将原来下载文件夹中的文件移动到其他位置,为 AirDrop 腾出文件夹。
- 打开终端,输入如下命令监控文件夹内文件数量,此举是为了保证不再出现图片丢失的情况。
每隔一秒统计一次「下载」文件夹内文件数量
➜ repeat 10000 {sleep 1|ls -l ~/Downloads|wc -l}
70
70
70
- 使用 iPhone 的 AirDrop 向 Mac 投递照片,每次 100 张传输。每次发送成功之后,要注意查看终端显示的照片数量,是否是增加了 100 张。Mac 接收到了全部照片之后,Mac 的 AirDrop 通知消息便会消失,这也可以作为照片是否成功传输的辅助判断。
- 投送完全部照片之后,全选照片新建文件夹,移动到 SSD,恢复「下载」文件夹的原始状态,工作完成。
其他工作
如果需要修正 视频和照片的拍摄时间,可以参考以下两篇文章:
《如何导出正确的照片拍摄时间》
《相册导出正确的视频拍摄时间》
反思
原本统计照片的任务是要交给 fswatch 实现的,由于朋友的电脑上没有安装 Homebrew,遂放弃了这个选择。当时是写了一个 while(1) 的 shell 脚本实现统计数量,但是后来想起还可以使用 repeat 实现该功能,使用 repeat + sleep 即可在指定间隔秒数见统计照片数量。这样就可以安装 Homebrew 的过程,省力省时。
此方案使用的工具主要有两个:AirDrop 和 repeat 命令。都是系统自带的功能和命令,用最简单的方法实现了该需求。