/run/user/$UID/gvfs
$ cd /run/user/$UID/gvfs/mtp*
$ cd SanDisk\ SD\ card/Movies/
$ pwd # prints "/run/user/1000/gvfs/mtp:host=%5Busb%3A003%2C096%5D/SanDisk SD card/Movies"
$ rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace ~/Videos/ ./
--inplace
:我强烈建议使用--inplace
,否则mtp可能会想要复制文件并将其重命名为旧文件。这可能导致文件被复制到SD卡两次:一次是为了将文件传输到SD卡,另一次是因为MTP驱动程序可能不支持(mv),它可能在底层使用(cp/rm)以确保安全。--verbose
、--progress
、--recursive
的描述,但它们都相当自说明。--omit-dir-times
和--no-perms
是必需的,因为mtp不支持这些功能。--omit-dir-times --no-perms --ignore-existing
。在通过MTP同步时,Rsync无法设置目录时间戳。我相当确定“无权限”是默认设置,但我喜欢明确指定它。忽略现有文件使其能够从上次中断的地方继续进行。 - Stephen Ostermiller--ignore-existing
?这只会导致冗余的丢失。你可以始终使用--size-only
,它只会将同步限制在目录列表而不是校验和上。我打算添加--omit-dir-times
和--no-perms
,因为听起来很有用,而且我记得最后出现了一个关于权限的错误。 - Evan Carroll--ignore-existing
选项,它会尝试同步所有文件。我喜欢你提出的--size-only
建议。下次我会尝试使用这个选项。 - Stephen Ostermiller~/Videos/ ./
- Stephen Ostermillerjmtpfs
- 不要使用sudo挂载。 - naught101我找到了这个解决方案:
编辑本地ssh配置文件,以更改主机“android”的默认端口
.ssh/config
host android
Port 2222
rsync -rvlc 音乐 android:SDCardLink/
更新
-rvlc
而不是-a
,因为设置权限和时间戳会导致很多警告。选项-c
可以使第二次同步更快。我更喜欢使用-rvl --size-only
而不是-a
,因为设置权限和时间戳会导致很多警告。选项--size-only
可以使第二次同步更快。
不幸的是,音乐应用程序需要一些时间才能看到新文件。重新启动设备可以帮助解决问题。
rsync -avz -e 'ssh -p 2222' Music android:SDCardLink/
(http://stackoverflow.com/a/4630407/399105) - bmaupin-c
会显著减慢速度?请解释一下。 - guettli-c
的 rsync 在这方面会遇到问题。 - guettli--size-only
应该是最快的解决方案。然而,它不像 -c
那样安全。 - niels192.168.1.5
后,以下命令对我有效,尽管每次可能会有所不同:rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/
。 - Organic AddictSDCardLink
简单地变成了SDCard
。所以你需要使用:rsync -rvl -e 'ssh -p 2222' ./WhatsApp/Media/ 192.168.2.102:SDCard/WhatsApp/Media/
。 - lechupadb pull
的绝佳替代品,后者因各种原因而失败。 - lucidbrotrsync
同步到我的安卓手机上?嗯,我采纳了这些答案中的部分建议,并编写了自己的Bash脚本:#!/bin/bash
echo "Starting rsync with Android."
src_dir="/home/joshua/Music"
dst_dir="/run/user/$UID/gvfs/mtp:host=OnePlus_HD1925_SERIAL/Internal shared storage"
rsync --progress \
--human-readable \
--omit-dir-times \
--no-perms \
--recursive \
--inplace \
--size-only \
--exclude='*.jpg' \
--exclude='*.JPG' \
--exclude='*.jpeg' \
--exclude='*.JPEG' \
--exclude='*.png' \
--exclude='*.bmp' \
--exclude='*.txt' \
--exclude='*.pdf' \
--delete \
"$src_dir" "$dst_dir"
echo "rsync operation is done. Enjoy the music :)"
~/.local/bin
里面,那是我放其他脚本的地方(你系统默认的PATH
应该已经有这个目录了)。你只需要确保文件传输开启,并且存储实际上已经挂载好了再运行它。如果你不这样做也没关系:只是rsync
会对你大喊大叫而已。size-only
确实更快
- 排除了专辑封面和扫描图像,以免淹没你手机的文件系统 :)
- 真正同步!当你从源头删除东西时,它会删除相应的内容,修复歌曲元数据并用正确的文件替换它,而不是保留两份副本。
--exclude
标签,那么您可能还需要一种方法来清理手机上已经同步了大量不需要的图片。# Remove all *.jpg and *.JPG from the current directory, recursively.
find . -iname *.jpg -exec rm {} \;
rsync备份适用于Android可配置为反向同步,即从Linux主机到Android设备。
而且,借助于LlamaLab Automate的帮助,可以在特定条件下自动配置Android设备进行rsync同步,例如:
sudo apt install android-file-transfer
sudo apt-get install grsync
rsync -r -t -v --progress -s /run/user/1000/gvfs/mtp\:host\=%5Busb%3A001%2C013%5D/Micro\ SD/test /home/FREENAS/
rsync -r -v --progress -s /home/FREENAS/test /run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C013%5D/Micro\ SD/
Termux将许多Linux命令行实用程序带到Android平台,包括rsync
和openssh
。
您可以在Android设备上设置SSH服务器,然后通过SSH使用rsync
,前提是您的PC和Android设备都连接到同一个WLAN网络。
Termux Wiki清楚地解释了设置SSH和使用rsync
所需的步骤。
总之:
安装Termux
$ passwd
新密码:
重新输入新密码:
新密码成功设置。
$ apt update
$ apt upgrade
安装openssh
$ apt install openssh
$ sshd
默认监听端口为8022
。安装rsync
$ apt install rsync
开始之前,你只需要:
$ whoami
u0_a223
$ ip -4 a | grep wlan0 | tail -1
inet 192.168.1.101/16 brd 192.168.255.255 scope global wlan0
在此情况下,它是 192.168.1.101
。$ rsync -e 'ssh -p 8022' -aP ~/Music u0_a223@192.168.1.101:/sdcard
termux-media-scan -r $source_folder
来通知应用程序有新文件产生,例如触发Google相册同步到云端。 - undefinedhttps://bbs.archlinux.org/viewtopic.php?id=261904
我使用的是Kubuntu,所以在/run/user/1000/gvfs/文件夹中没有MTP文件夹。 我下载了以下软件包:https://li.nux.ro/download/nux/dextop/el7/x86_64/simple-mtpfs-0.2-3.el7.nux.x86_64.rpm
有一个在Kubuntu 20.04上运行的二进制文件。你可以在`bin`文件夹中找到它,并解压到一个文件夹中。 不幸的是,在Plasma上,可能需要杀死特定的进程才能挂载设备。然后你可以使用`fuser`命令。 首先,你需要用`lsusb`命令找到你的设备:$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 8087:0a2a Intel Corp. Bluetooth wireless interface
Bus 001 Device 011: ID 2717:ff48 Xiaomi Inc. Mi/Redmi series (MTP + ADB)
Bus 001 Device 003: ID 04f2:b3fd Chicony Electronics Co., Ltd HD WebCam (Asus N-series)
Bus 001 Device 006: ID 04fc:05d8 Sunplus Technology Co., Ltd Wireless keyboard/mouse
Bus 001 Device 004: ID 1bcf:08a0 Sunplus Innovation Technology Inc. Gaming mouse [Philips SPK9304]
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2717:ff48
。
运行以下代码,并将2717:ff48
替换为您设备的MAC地址:DATA=`lsusb | grep '2717:ff48'`
echo $DATA
# Reading the bus number:
BUS=`echo ${DATA:4:3}`
# Reading the device number:
DEV=`echo ${DATA:15:3}`
# Killing the process which is using the device (if any)
fuser -k /dev/bus/usb/$BUS/$DEV
./simple-mtpfs --device 1 /tmp/xiaomi
我知道OP想要使用rsync,但如果目的是同步目录,我强烈推荐使用syncthing
。很多好处:
syncthing
作为手机备份解决方案的一部分,包括两个步骤:(1)将手机上的所有重要数据同步到外部主机上,(2)在该主机上设置备份解决方案。我个人会将我拥有的任何设备上的重要数据同步到至少另一台设备,可能是两台,位于物理上不同的地方;这些设备中至少有一台具有Raid硬盘;然后我在其中一台设备上添加snapper
,以保留所有文件的旧版本;或者你可以使用syncthing
的一个功能来实现相同的结果。
snapper
,很容易填满磁盘,所以请谨慎操作。
rsync
,我建议在计算机上创建一个热点,并将安卓设备连接到该热点。这样可以大大提高同步速度。 - Alexey