我如何连接到我的 Android 设备来 rsync 音乐(或其他东西)?
答案1
实际上通过 MTP/usb 使用 rsync
这比大家说的要简单,首先请注意,当 GVFS 安装 MTP 安装时,它将在下面可用。您可以通过在图形文件浏览器(thunar/nautilus/etc)中打开手机来强制执行此操作
/run/user/$UID/gvfs
进入那里。假设您有一个 mtp 设备,则应该可以这样做:
$ cd /run/user/$UID/gvfs/mtp*
找到要传输文件的位置,然后将其 rsync 到该位置
$ 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/ ./
Rsync 选项
--inplace
: 我高度建议使用--inplace
不带 which mtp 的版本,可能需要复制新文件,然后将其重命名为旧文件。这可能会导致将文件复制到 SD 卡两次:一次用于 mtp 传输到 SD 卡,另一次是因为 MTP 驱动程序可能不支持 (mv),它可能在后台 (cp/rm) 以确保安全。- 阅读 man rsync 来了解 的描述
--verbose
,--progress
但--recursive
它们都非常具有自文档性。 --omit-dir-times
--no-perms
是必需的,因为 mtp 不支持。
答案2
使用 sshelper
我找到了这个解决方案:
- 安装帮助器在设备上(无需 root 设备,可从 Google Play 市场获取)
- 在我的 WLAN 中,该设备名为“android”。但是,如果您无法为设备指定主机名,则可以使用 IP。
编辑本地 ssh-config,以更改主机“android”的默认端口
.ssh/config
host android
Port 2222
- 在设备上启动 sshelper。
- 将 Android 设备连接到您的 WLAN。
rsync -rvlc 音乐 android:SDCardLink/
更新
我更喜欢-rvlc
这样做,-a
因为设置权限和时间戳不起作用,所以您会收到很多警告。该选项-c
使第二次同步更快。
我更喜欢-rvl --size-only
这样做,-a
因为设置权限和时间戳不起作用,所以您会收到很多警告。该选项--size-only
使第二次同步更快。
不幸的是,音乐应用程序需要一些时间才能看到新文件。重启设备会有所帮助。
答案3
以上方法都不符合我的要求。具体来说是 OP 问题的一部分:如何将rsync
音乐传输到 Android 手机?好吧,我采纳了这些答案中的部分建议,并编写了自己的 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
只会对你大喊大叫。
此脚本:
- 考虑到 Android 无法保留文件的 ext4 样式元数据
- 根据我的经验,使用
size-only
- 防止专辑封面和扫描件充斥您的手机文件系统:)
- 真的同步了!当你从源中删除内容时,它会删除内容,例如修复歌曲元数据并将其替换为正确的文件,而不是保留两个副本。
此外,如果您因为喜欢这些--exclude
标签而特别选择这个答案,那么如果手机已经同步了一大堆不需要的图像,您可能还需要一种方法来清理手机:
# Remove all *.jpg and *.JPG from the current directory, recursively.
find . -iname *.jpg -exec rm {} \;
答案4
我正在寻找一种解决方案,以便从 Android 到 NAS 进行图像备份。
Grsync 是 rsync 的图形版本,工作正常美好的。
幸运的是,它也可以 rsync 到 android。唯一的问题是——它不能保留时间戳,所以所有传输的文件都会有 rsync 时的时间戳。
sudo apt install android-file-transfer
sudo apt-get install grsync
看来我在命令行中用于从 android 进行 rsync 的 -a 键不适用于 mtp:当我在 grsync 中检查“保留权限”和“保留所有者”以及“保留组”时,没有文件被传输。默认的 grsync 设置“保留时间”、“详细”和“显示传输进度”就可以正常工作。
当 rsyncing 到 android 时应该省略 -t 键:文件将被传输,但 rsync 将因不保留时间戳而出现错误。
来自 Android 的命令行的 Grsync 输出:
rsync -r -t -v --progress -s /run/user/1000/gvfs/mtp\:host\=%5Busb%3A001%2C013%5D/Micro\ SD/test /home/FREENAS/
Grsync 命令行输出到 android:
rsync -r -v --progress -s /home/FREENAS/test /run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C013%5D/Micro\ SD/
其中 run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C013%5D 我的 Android 手机挂载点。