实际上通过 MTP/usb 使用 rsync

实际上通过 MTP/usb 使用 rsync

我如何连接到我的 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 手机挂载点。

相关内容