我使用各种索尼随身听随时随地录制大量简短的音频笔记(跑步、游泳、步行或乘公共汽车时)。
我曾经将每个设备作为大容量媒体存储 (MMS) 安装到/media/$USER/WALKMAN/
linux 下,并/media/WALKMAN/Record/Voice
通过脚本将音频笔记 (in )移动到我的硬盘驱动器,该脚本通过重命名包含音频笔记的文件夹来准备特殊的处理顺序。
自从几个月前升级到新的 linux 内核以来,随身听被认为是媒体传输协议 (MTP) 设备而不是 MMS。这不仅将安装点从 更改为/media/$USER/WALKMAN/
类似/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media
,而且脚本(或 shell)无法访问这个新位置:从那时起,我一直在“通过鼠标”移动和重命名音频笔记的文件夹。
即使使用已知的 MTP 接口(例如 Python 中的 PyMTP,mtpfs)也会失败,因为设备在插入时已经安装。许多其他用户抱怨他们的 android 设备的 MTP。从 MMS 到 MTP 的转变在很大程度上对 Android 设备来说是合理的,因为那些与安装机器共享对其文件的访问权限,我认为它不适合随身听设备。在这种情况下,MMS 协议更简单、更快(并且在上次内核升级之前是默认值)。
我的问题不在于安装点的变化:我确实在/run/user/1003/gvfs/mtp:host=*/Storage\ Media/
. 问题是 shell 中从这个位置到我的硬盘驱动器的简单 cp 或 mv 不起作用:不支持复制(或移动)文件夹或单个文件:
cp -r /run/user/1003/gvfs/mtp:host=*/Storage\ Media/Record/Voice ~/Unison/Boxes/MyBoxes/AudioNotesToProcess/2014-12-28-09-17
cp: cannot open ‘/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C016%5D/Storage Media/Record/Voice/VR0001.WAV’ for reading: Operation not supported
cp: cannot open ‘/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C016%5D/Storage Media/Record/Voice/VR0002.WAV’ for reading: Operation not supported
Run Code Online (Sandbox Code Playgroud)
`
插入设备后dmesg的输出为:
[ 217.097691] usb 2-1: new high-speed USB device number 6 using xhci_hcd
[ 217.114176] usb 2-1: New USB device found, idVendor=054c, idProduct=059a
[ 217.114186] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=8
[ 217.114192] usb 2-1: Product: WALKMAN
[ 217.114197] usb 2-1: Manufacturer: SONY
[ 217.114201] usb 2-1: SerialNumber: 0E4A0C57283357
[ 217.134426] usb-storage 2-1:1.0: USB Mass Storage device detected
[ 217.134471] scsi4 : usb-storage 2-1:1.0
[ 217.134551] usbcore: registered new interface driver usb-storage
Run Code Online (Sandbox Code Playgroud)在安装设备之前和之后,“mount”的输出不会改变。如下:
mount
/dev/sda7 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
gvfsd-fuse on /run/user/1003/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=jbarbay)
Run Code Online (Sandbox Code Playgroud)