Как rsync для Android

50

Как я могу подключиться к своему устройству Android для музыки rsync (или другого материала)?

guettli
источник
Я рекомендую отредактировать это, чтобы точно объяснить, какое действие вызвало это сообщение об ошибке. (Например, если это вывод команды, вы можете включить полную команду.)
Элия ​​Каган,
1
может быть интересно: Syncopoli
DJCrashdummy
@DJCrashdummy, если вы напишите свой комментарий в качестве ответа, я проголосую за него.
Геттли
@guettli Я написал это только как комментарий, потому что Syncopoli - просто rsync-клиент (на данный момент).
DJCrashdummy

Ответы:

50

На самом деле с помощью rsync через MTP / USB

Проще, чем все говорят, сначала обратите внимание, что когда 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без которого mtp может захотеть скопировать файл новым, а затем переименовать его в старый. Это может привести к копированию файла на SD-карту дважды: один раз для переноса mtp на SD-карту, а другой раз, потому что драйвер MTP может не поддерживать (mv), но может (cp / rm) находиться под капотом для обеспечения безопасности. ,
  • начитанный человек Rsync для описания --verbose, --progress, --recursiveно они довольно самодокументируемыми.
  • --omit-dir-times --no-perms необходимы, потому что mtp не поддерживает это.
Эван Кэрролл
источник
3
Я добавляю следующие варианты --omit-dir-times --no-perms --ignore-existing. Rsync не может установить временные метки каталога по MTP. Я уверен, что по умолчанию используется «no permissions», но мне нравится его указывать. Игнорирование существующих файлов позволяет подобрать то, где остановился.
Стивен Остермиллер
4
Почему --ignore-existing? Это просто потеря избыточности. Вы всегда можете --size-onlyуменьшить синхронизацию с списком каталогов, а не с контрольными суммами. Я собираюсь добавить --omit-dir-timesи, --no-permsпотому что это звучит полезно, и я, кажется, вспоминаю об ошибке в конце об этом.
Эван Кэрролл
Rsync имеет проблемы с правильной настройкой меток времени по MTP, поэтому без --ignore-existingнего пытается синхронизировать все файлы. Мне нравится ваше --size-onlyпредложение. Я попробую это вместо этого в следующий раз.
Стивен Остермиллер
3
Я также использую поставить косую черту в пункте назначения, чтобы мне не приходилось использовать звезду на источнике:~/Videos/ ./
Стивен Остермиллер
Мне также пришлось добавить «--delete-after», чтобы удалить файлы, которые я уже удалил из папки «Музыка» на компьютере. Таким образом, полная команда: rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace --ignore-существующие --delete-after / home / user / MUSIC /.
happyyskeptic
39

Использование sshelper

Я нашел это решение:

  • Установите sshelper на устройство (не нужно рутированное устройство, доступно на Google Play Market)
  • В моем WLAN устройство называется «андроид». Но вы можете использовать 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делает вторую синхронизацию намного быстрее.

К сожалению, музыкальным приложениям нужно некоторое время, чтобы увидеть новые файлы. Перезапуск устройства помогает.

guettli
источник
13
Альтернативный способ использования rsync с SSHelper без изменения .ssh / config: rsync -avz -e 'ssh -p 2222' Music android:SDCardLink/( stackoverflow.com/a/4630407/399105 )
bmaupin
1
@guettli зачем опция -c контрольная сумма для синхронизации музыкальных файлов? это может значительно замедлиться
EdiD
5
@guettli от rsync man: -c, --checksum. Без этой опции rsync использует «быструю проверку», которая (по умолчанию) проверяет, совпадают ли размер файла и время последней модификации между отправителем и получателем. Эта опция изменяет это, чтобы сравнивать 128-битную контрольную сумму для каждого файла, который имеет соответствующий размер. Генерация контрольной суммы означает, что обе стороны будут тратить много дискового ввода-вывода на чтение всех данных в файлах при передаче, что может значительно замедлить процесс.
EdiD
4
@ Guettli Я думаю, это --size-onlyбыло бы самое быстрое решение. Однако это не так, как сохранить-c
Нильс
2
Я использовал USB-модем и получил гораздо более быстрые передачи. Следующая команда сработала для меня после того, как я запустил SSHelp, и она показала IP, 192.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 Addict
3

Резервное копирование rsync для Android можно настроить для обратной синхронизации, то есть с хоста Linux на устройство Android.

А с помощью LlamaLab Automate можно настроить устройство Android для автоматической rsync при определенных условиях, например:

  1. в 5 часов утра,
  2. когда телефон подключен к определенному Wi-Fi, и
  3. когда он заряжается.
Александр Щебликин
источник